我试图根据时区偏移列中的时间。我想用这个:
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]
我有需要为UTC_Offset值偏移的TIME_FROM和TIME_TO列。因此,对于图片中的实例,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
根据你的varchar(19)
(如DATETIME CONVERSION CODE
)保持120
长度。