我需要将值转换为SQL Server DateTime
。
数据如下所示:
我试过
CONVERT(DATE, '20161021-12:55:16.000', 102)
它会引发错误。
我可以在SQL中获得帮助,将这些样本转换为有效的日期时间吗?
这些值也是UTC。
我需要将它们转换为EST。
感谢您的帮助。
答案 0 :(得分:6)
如果您对自己的格式保持一致有信心,那么您可以将其删除(我已将日期时间用于说明目的);
CONVERT(DATETIME, REPLACE('20161021-12:55:16.000','-',' '), 102)
结果
2016-10-21 12:55:16.000
对于转化,您可以转换为日期时间,取消您的工作时间,然后转换为您想要的日期格式;
CONVERT(DATETIME, DATEADD(hh,-5,CONVERT(DATETIME,REPLACE('20161021-12:55:16.000','-',' '))), 102)
结果;
2016-10-21 07:55:16.000
为了更好地了解这一点,请在凌晨5点之前设置它,然后您将获得前一天;
CONVERT(DATETIME, DATEADD(hh,-5,CONVERT(DATETIME,REPLACE('20161021-04:55:16.000','-',' '))), 102)
结果
2016-10-20 23:55:16.000
作为参考,在我的测试系统上,您不需要转换为102,这是默认设置。
DATEADD(hh,-5,CONVERT(DATETIME,REPLACE('20161021-04:55:16.000','-',' ')))
要动态得到时间差,请执行以下操作;
DATEADD(hh,DATEDIFF(hh,GETUTCDATE(),GETDATE()),CONVERT(DATETIME,REPLACE('20161021-04:55:16.000','-',' ')))
答案 1 :(得分:4)
不需要CONVERT 102.
Select cast(replace('20161021-12:55:16.000','-',' ') as datetime)
返回
2016-10-21 12:55:16.000
从UTC转换为本地服务器。应该记住,时间差将随着夏令时(EDT / EST)而变化
Select DateAdd(MINUTE,DateDiff(MINUTE,GetUTCDate(),GetDate()),cast(replace('20161021-12:55:16.000','-',' ') as datetime))
Reuturns
2016-10-21 07:55:16.000
答案 2 :(得分:0)
试试这个......
select CONVERT(DATETIME, replace('20161021-12:55:16.000','-',' '), 102)
对于EST
select dateadd(HH,-5,CONVERT(DATETIME, replace('20161021-12:55:16.000','-',' '), 102))
答案 3 :(得分:0)
SELECT CONVERT(datetime,SWITCHOFFSET(CONVERT(datetimeoffset,
REPLACE('20161021-12:55:16.000','-',' ')),
DATENAME(TzOffset, SYSDATETIMEOFFSET())))
AS ColumnInLocalTime