【发布时间】:2021-11-04 12:08:12
【问题描述】:
我有一个表,它以 UTC 时区存储交易日期时间。我需要将此时间转换为东部时区,即 EST 或 EDT,具体取决于交易日期。
如何在不编写大函数或创建表/视图来标记每个交易日期的 EST / EDT 的情况下做到这一点?
【问题讨论】:
标签: sql-server timezone
我有一个表,它以 UTC 时区存储交易日期时间。我需要将此时间转换为东部时区,即 EST 或 EDT,具体取决于交易日期。
如何在不编写大函数或创建表/视图来标记每个交易日期的 EST / EDT 的情况下做到这一点?
【问题讨论】:
标签: sql-server timezone
使用AT TIME ZONE,它将一个值的时区更改为那里的相关时间,并遵守夏令时:
SELECT CONVERT(datetimeoffset(0),'2021-09-07T15:25:37+00:00') AT TIME ZONE 'Eastern Standard Time' AS Sep21,
CONVERT(datetimeoffset(0),'2021-01-09T15:25:37+00:00') AT TIME ZONE 'Eastern Standard Time' AS Jan21;
返回以下内容:
Sep21 Jan21
---------------------------------- ----------------------------------
2021-09-07 11:25:37 -04:00 2021-01-09 10:25:37 -05:00
【讨论】:
datetime 而不是datetimeoffset,还尝试将另一个样式参数添加到CONVERT 函数调用SELECT CONVERT(datetime,'2021-09-07 15:25:37', 20) AT TIME ZONE 'Eastern Standard Time' AS Sep21,但仍然在输出中获得偏移值。
SELECT Sep21 = CONVERT(datetime, (CONVERT(datetime, '20210907 15:25:37') AT TIME ZONE 'UTC' AT TIME ZONE 'Eastern Standard Time'));。这将返回2021-09-07 11:25:37.000,我认为这就是您所追求的,如this db<>fiddle 所示。