SQL 时间偏移的服务器嵌套查询

SQL Server nested query for time offset

我正在尝试根据时区偏移列中的时间。我正在尝试使用这个:

SELECT 
    SERIAL_NUMBER,
    CONVERT(datetime, TIME_FROM)
      AT TIME ZONE ('US Eastern Standard Time')
FROM 
    tmp_TestZone

哪个 returns 我需要什么,但是我的 table 中的每一行都有特定时区的记录,可以是任何时区。我要做的是用嵌套查询替换 'US Eastern Standard Time' ,该查询将为特定序列号提取正确的时区。时区存储在最后一列 TIMEZONE_LU.TZ

我的 table 看起来像这样:

  ,[IP_ADDRESS]
  ,[NAME]
  ,[GROUP_NAME]
  ,[DEVICE_TYPE]
  ,[LINE_NAME]
  ,[DATE_FROM]
  ,[TIME_FROM]
  ,[TIME_TO]
  ,[fw]
  ,[bw]
  ,[SITE_NAME]
  ,[TZ]

我试过这样构建查询:

SELECT
    SERIAL_NUMBER,
    CONVERT(datetime, TIME_FROM)
        AT TIME ZONE (SELECT TZ
                      FROM tmp_TestZone) NEW_TIME
FROM 
    tmp_TestZone

但是我收到一个错误:

Msg 512, Level 16, State 1, Line 2
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

我该如何解决这个问题?

建议:

SELECT
SERIAL_NUMBER,
CONVERT(datetime, TIME_FROM)
    AT TIME ZONE (SELECT TZ
                  FROM tmp_TestZone) NEW_TIME
FROM 
tmp_TestZone

会工作,但我只是发现我的时区没有标准化。 我将尝试使用

  SELECT SERIAL_NUMBER,
  SWITCHOFFSET(TIME_FROM, '-05:00')
   FROM tmp_TestZone2

你能帮我替换上面代码中的 '-05:00' 以便 ti 从 UTC_offset 列读取值,这些值的格式与 '-05:00'

完全相同

非常感谢

好的,这是 table:

SELECT [SERIAL_NUMBER]
  ,[IP_ADDRESS]
  ,[NAME]
  ,[GROUP_NAME]
  ,[DEVICE_TYPE]
  ,[LINE_NAME]
  ,[DATE_FROM]
  ,[TIME_FROM]
  ,[TIME_TO]
  ,[fw]
  ,[bw]
  ,[SITE_NAME]
  ,[TZ]
  ,[CC]
  ,[UTC_offset]
  ,[UTC_DST_offset]

来自 [VHA].[dbo].[tmp_TestZone2]

这是 table 的数据:

我有 TIME_FROM 和 TIME_TO 列需要偏移 UTC_Offset 值。 因此,对于图片中的实例 TIME_FROM (10:10:00) 和 TIME_TO (11:00:00) 应该偏移 -7:00 等等,每一行 TIME_FROM 和 TIME_TO 应该偏移 UTC_Offset.

列中的任何值

这样试试

SELECT
    SERIAL_NUMBER,
    CONVERT(datetime, TIME_FROM)
        AT TIME ZONE temp.tz
FROM 
    tmp_TestZone AS temp;

这可能对你有帮助。

已编辑问题的答案:

如果我正确理解了你的问题,那么请尝试以下查询以从结果中删除你的时间偏移...

SELECT SERIAL_NUMBER,
CONVERT(varchar(19),SWITCHOFFSET(TIME_FROM, '-05:00'),120) AS Result_date
FROM tmp_TestZone2

SELECT SERIAL_NUMBER,
CONVERT(varchar(19),SWITCHOFFSET(TIME_FROM, UTC_offset),120) AS Result_date
FROM tmp_TestZone2

根据您的 DATETIME CONVERSION CODE(如 120)保持 varchar(19) 长度。