如何在SQL Server中将varchar转换为datetime

时间:2017-11-13 23:33:48

标签: sql sql-server datetime

我想将varchar数据转换为datetime格式。所以,任何人都可以让我知道。这是列中可用的样本数据。

enter image description here

我尝试了以下内容

SELECT 
    CASE WHEN [EntryTime] = '' 
       THEN NULL 
       ELSE CONVERT(datetime2, [EntryTime]) 
    END [EntryTime] 
FROM
    table 

我得到了这个结果:

enter image description here

但是,我不需要额外的毫秒数。

那么,任何人都可以告诉我如何将其转换为datetime格式?

对于所有其他尝试,我收到错误

  

从字符串

转换日期和/或时间时转换失败

那么,有人可以帮助我吗?感谢。

2 个答案:

答案 0 :(得分:0)

将亚秒宽度指定为datetime2(7)

select
       try_cast(EntryTime as datetime2(7))    by_try_cast
     , try_convert(datetime2(7), EntryTime )  by_try_covert

我还建议您使用try_cast()或try_convert()(如果它们可用),如果不是只是删除"尝试_",这些的优点是如果字符串是无效日期,则返回NULL并且不要使查询崩溃。

如果你真的不想要datetime2:

select cast(try_cast(EntryTime as datetime2(7)) as datetime)

看到它:http://rextester.com/YWBB31287

答案 1 :(得分:-1)

LEFT和Concat(SQL2012 +)/或使用标准串联 然后转换或转换(格式化)

declare @mytable as table (
entrytime varchar(100)
)

insert into @mytable
values ('2017-08-31 08:23:23'),
('2017-11-10 08:28:37.75000000'),
('2017-10-30 08:23:37.32000000')


select cast(left(concat(entrytime,'.000'),23) as datetime) from @mytable

结果

2017-08-31 08:23:23.000
2017-11-10 08:28:37.750
2017-10-30 08:23:37.320