SQL Server嵌套查询的时间偏移量

时间:2018-12-18 04:35:15

标签: sql-server sql-server-2016 timezone-offset

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

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

返回我需要的内容,但是表中的每一行都有具有特定时区的记录,该时区可以是任何时区。我要做的是用嵌套查询替换“美国东部标准时间”,该查询将为特定序列号提取正确的时区。时区存储在最后一列TIMEZONE_LU.TZ

我的桌子看起来像这样:

  ,[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

但是我遇到一个错误:

  

信息512,第16级,状态1,第2行
  子查询返回的值超过1。当子查询遵循=,!=,<,<=,>,> =或将子查询用作表达式时,不允许这样做。

我该如何解决?

建议:

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”

非常感谢您

好,这是表格:

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]

这是该表的数据: enter image description here

我有TIME_FROM和TIME_TO列,需要为UTC_Offset值偏移。 因此,对于图片中的实例,TIME_FROM(10:10:00)和TIME_TO(11:00:00)应该偏移-7:00,依此类推,对于每一行,TIME_FROM和TIME_TO都应该偏移为有史以来的值在UTC_Offset列中。

1 个答案:

答案 0 :(得分:1)

尝试这样

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

OR

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

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