使用 "Singapore Standard Time" 时区减去小时

Subtract hour using "Singapore Standard Time" timezone

select (convert(datetime ,SWITCHOFFSET(CONVERT(datetimeoffset, '2022-02-11 11:15:00.000'),
   (select current_utc_offset FROM sys.time_zone_info where name ='Singapore Standard Time')
))) CurrentTime

我怎样才能达到低于预期的结果?

当前结果:

CurrentTime
-----------------------
2022-02-11 19:15:00.000

预期结果:

CurrentTime
-----------------------
2022-02-11 03:15:00.000

PS: 我不能在脚本中使用 -8-08:00

sys.time_zone_info中的偏移量是从UTC+00:00切换到另一个时区的偏移量。

所以“新加坡标准时间”是 +08:00

但如果需要切换到UTC时区,可以更改符号。

SELECT (CONVERT(DATETIME, 
           SWITCHOFFSET(CONVERT(DATETIME, '2022-02-11 11:15:00.000'),
             (SELECT TRANSLATE(CURRENT_UTC_OFFSET,'+-','-+') FROM sys.time_zone_info WHERE name ='Singapore Standard Time')
     ))) AS CurrentTime

最好使用 AT TIME ZONE 语法:

SELECT
  CONVERT(DATETIME, (CONVERT(DATETIME, '2022-02-11 11:15:00.000')
          AT TIME ZONE 'Singapore Standard Time'
          AT TIME ZONE 'UTC')) AS CurrentTime

两种方法 return 相同:

CurrentTime
2022-02-11 03:15:00.000