SQL 时间与我的系统时区不正确

SQL time in incorrect from that of my system timezone

我们有一个 SQL 数据库,该数据库始终 returns 格林威治标准时间 (GMT)。我们位于东部标准时区 (EST)。这搞乱了我们从特定日期提取数据的一些查询。我尝试使用 (StartTime AT TIME ZONE 'Eastern Standard Time' as StartTime_ET,但只有 returns 结果与 GMT -5 相同。我只希望确切的结果在 EST 中。

这改变了我的完整逻辑过程。有什么办法吗?

假设你的值都是UTC并且你的列StartTime不是datetimeoffset,那么你需要把你的值变成datetimeoffset 首先,然后更改时区。当您在 不是 的日期和时间数据类型上使用 AT TIMEZONE 时,DATETIMEOFFSET 假定 值已经在正确的时区。因此,例如 SELECT GETUTCDATE() AT TIME ZONE 'Eastern Standard Time'; 现在会 return 2021-08-05 09:53:56.8500000 -04:00,即使 EST 中的时间实际上现在是 2021-08-05 05:53:56.8500000 -04:00

因此您需要先添加偏移量,然后再使用AT TIME ZONE。所以,GETUTCDATE 会是这样的:

SELECT SWITCHOFFSET(GETUTCDATE(),0) AT TIME ZONE 'Eastern Standard Time';

因此,据推测,您只需要对您的列 StartTime 执行相同的操作,这也是 UTC 时间:

SWITCHOFFSET(StartTime,0) AT TIME ZONE 'Eastern Standard Time'

如果您不需要时区部分,则可以将其转换回不同的日期和时间数据类型:

CONVERT(datetime2(0),SWITCHOFFSET(StartTime,0) AT TIME ZONE 'Eastern Standard Time')