SQL - 将字符串转换为日期和时间
SQL - Converting String to Date and Time
我需要将值转换为 SQL 服务器 DateTime
。
数据如下所示:
- 20161021-12:55:16.000
- 20161021-13:22:09.974
我试过了
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
我需要将值转换为 SQL 服务器 DateTime
。
数据如下所示:
- 20161021-12:55:16.000
- 20161021-13:22:09.974
我试过了
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