将varchar转换为具有millisec的sql中的datetime

Pin*_*ink 4 sql sql-server-2008

我有一个abc varchar(100)包含数据的列2011-09-26 16:36:57.810000

我想将此列转换为DATETIME...

但做一个

Convert(DATETIME, abc,120) 
Run Code Online (Sandbox Code Playgroud)

给出了这个错误:

从字符串转换日期和/或时间时转换失败.

任何人都可以帮我转换我的varchar格式到datetimeSQL Server 2008?

提前致谢

Kaf*_*Kaf 7

您可以使用样式121,但只能使用3位数的毫秒(即yyyy-mm-dd hh:mi:ss.mmm(24h))格式.

declare @abc varchar(100)='2011-09-26 16:36:57.810' 
select convert(datetime,@abc,121)
Run Code Online (Sandbox Code Playgroud)

因此,您可以通过将varchar字段限制为23个字符进行排序,然后再转换为:

declare @abc varchar(100)='2011-09-26 16:36:57.810000' 
select convert(datetime,convert(varchar(23),@abc),121)
Run Code Online (Sandbox Code Playgroud)

或者使用该Left()函数获取前23个字符:

select convert(datetime,left(@abc,23),121)
Run Code Online (Sandbox Code Playgroud)

尽量避免将日期存储为字符串.


GBr*_*ian 5

如果您需要 6 位精度使用 DATETIME2

SELECT CONVERT(DATETIME2, '2016-08-09T08:08:50.358000', 126) as MSSQLDateTime2
SELECT CONVERT(DATETIME, '2016-08-09T08:08:50.358', 126) as MSSQLDateTime
Run Code Online (Sandbox Code Playgroud)