SQL - 将字符串转换为日期和时间

SQL - Converting String to Date and Time

我需要将值转换为 SQL 服务器 DateTime

数据如下所示:

我试过了

CONVERT(DATE, '20161021-12:55:16.000', 102) 

它抛出一个错误。

我可以在 SQL 中获得帮助,将这些示例转换为有效的日期时间吗?

这些值也是 UTC。

我需要将它们转换为 EST。

感谢您的帮助。

如果您确信您的格式是一致的,那么您可以去掉那个破折号(我使用 datetime 来说明);

CONVERT(DATETIME, REPLACE('20161021-12:55:16.000','-',' '), 102) 

结果

2016-10-21 12:55:16.000

转换你可以转换成datetime,把你的hours去掉再转换成你想要的日期格式;

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','-',' ')))

试试这个...

select CONVERT(DATETIME, replace('20161021-12:55:16.000','-',' '), 102) 

美国东部时间

select dateadd(HH,-5,CONVERT(DATETIME, replace('20161021-12:55:16.000','-',' '), 102))
 SELECT CONVERT(datetime,SWITCHOFFSET(CONVERT(datetimeoffset, 
                                REPLACE('20161021-12:55:16.000','-',' ')), 
                        DATENAME(TzOffset, SYSDATETIMEOFFSET()))) 
   AS ColumnInLocalTime

不需要 CONVERT 102。

Select cast(replace('20161021-12:55:16.000','-',' ') as datetime)

Returns

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))

回报率

2016-10-21 07:55:16.000