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')
我们有一个 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')