我正在尝试根据时区偏移列中的时间。我正在尝试使用此
: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]
我有TIME_FROM和TIME_TO列,需要为UTC_Offset值偏移。 因此,对于图片中的实例,TIME_FROM(10:10:00)和TIME_TO(11:00:00)应该偏移-7:00,依此类推,对于每一行,TIME_FROM和TIME_TO都应该偏移为有史以来的值在UTC_Offset列中。
答案 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
)。