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)
长度。
我正在尝试根据时区偏移列中的时间。我正在尝试使用这个:
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)
长度。