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
格式到datetime
SQL Server 2008?
提前致谢
您可以使用样式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)
尽量避免将日期存储为字符串.
如果您需要 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)