将varchar转换为sql中具有毫秒的datetime
我有一个列,将varchar转换为sql中具有毫秒的datetime,sql,sql-server-2008,Sql,Sql Server 2008,我有一个列,abc varchar(100),数据如下2011-09-26 16:36:57.810000 我想将此列转换为DATETIME 但是做一个 Convert(DATETIME, abc,120) 正在给出此错误: 从字符串转换日期和/或时间时,转换失败 有谁能帮我将SQL Server 2008中的varchar格式转换为datetime 提前感谢您可以使用样式121,但毫秒只能有3位(即yyyy-mm-dd-hh:mi:ss.mmm(24h))格式 因此,您可以通过将varch
abc varchar(100)
,数据如下2011-09-26 16:36:57.810000
我想将此列转换为DATETIME
但是做一个
Convert(DATETIME, abc,120)
正在给出此错误:
从字符串转换日期和/或时间时,转换失败
有谁能帮我将SQL Server 2008中的varchar
格式转换为datetime
提前感谢您可以使用样式121,但毫秒只能有3位(即
yyyy-mm-dd-hh:mi:ss.mmm(24h)
)格式
因此,您可以通过将varchar字段限制为23个字符,然后再转换为:
declare @abc varchar(100)='2011-09-26 16:36:57.810000'
select convert(datetime,convert(varchar(23),@abc),121)
或者使用Left()
函数获取前23个字符,如下所示:
select convert(datetime,left(@abc,23),121)
尽量避免将日期存储为字符串。SQL Server仅支持毫秒小数点后3位,因此以下操作将起作用:
Convert(DATETIME, SUBSTRING(abc, 0, 24) ,120)
如果您需要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
根据GBrian的回答,我得出:
CONVERT(DATETIME, CONVERT(DATETIME2, abc, 126))
我还没有将其与基于子字符串的解决方案进行比较。假设我们有以下字符串变量:
DECLARE @d VARCHAR(100) = '2020-04-06T04:35:07.9490051Z' -- 7 digits nanoseconds
DECLARE @d1 VARCHAR(100) = '2020-04-05T15:00:00Z' -- simple: without nanoseconds
我使用运算符得出了解决方案:
SELECT CAST(LEFT(@d,19) + 'Z' AS DATETIME) -- outputs: 2020-04-06 04:35:07.000
SELECT CAST(LEFT(@d1,19) + 'Z' AS DATETIME) -- outputs: 2020-04-05 15:00:00.000
字符串
2011-09-26 16:36:57.810000
无法转换为日期时间。毫秒只能有0-999。但是我如何才能将此列转换为日期时间,然后再转换为任何其他方式我已经有了以6位mellisec.形式给出的用户数据,因此我认为我需要拆分最后3位数字?是的,在转换之前,您必须确保毫秒只有3位数字。我已经更新了我的答案。您还应该注意日期时间类型的精度-例如,将正确保留.997,但强制转换.998或.999之类的值将导致该值四舍五入到最接近的秒。对不起,请操作。Datetime2可从SQL Server 2008 R2获得
SELECT CAST(LEFT(@d,19) + 'Z' AS DATETIME) -- outputs: 2020-04-06 04:35:07.000
SELECT CAST(LEFT(@d1,19) + 'Z' AS DATETIME) -- outputs: 2020-04-05 15:00:00.000