You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server时态表查询使用FOR SYSTEM_TIME AS OF...AT TIME ZONE报语法错误

错误原因及解决方法

问题分析

你的语法错误源于AT TIME ZONE不能直接附加在FOR SYSTEM_TIME AS OF的时间参数之后。FOR SYSTEM_TIME AS OF要求接收一个明确的datetime、datetime2或datetimeoffset类型值,而你试图在参数后直接嵌套时区转换逻辑,不符合SQL Server的语法规则。

正确写法

需要先完成时区转换,再将结果传入AS OF子句,以下是两种可行方式:

方式1:提前转换变量值

DECLARE @LocalTime DATETIMEOFFSET = '2021-09-01 10:00:00.7230011 -07:00';
-- 先将本地时间转换为UTC时区的datetimeoffset类型
DECLARE @UtcTime DATETIMEOFFSET = @LocalTime AT TIME ZONE 'UTC';

SELECT *
FROM [vw_GetOrgChart]
FOR SYSTEM_TIME AS OF @UtcTime;

方式2:在AS OF子句内直接转换

DECLARE @LocalTime DATETIMEOFFSET = '2021-09-01 10:00:00.7230011 -07:00';

SELECT *
FROM [vw_GetOrgChart]
FOR SYSTEM_TIME AS OF CONVERT(DATETIMEOFFSET, @LocalTime AT TIME ZONE 'UTC');

补充说明

AT TIME ZONE的核心作用是在不同时区间转换时间值:

  • 若输入为datetimeoffset类型,它会先将值转换为目标时区的对应时间,再返回datetimeoffset类型结果
  • 你之前的写法错误在于把转换逻辑放在了AS OF的参数范围外,SQL Server无法识别这种嵌套结构,必须保证AS OF后是单一、合法的时间类型表达式或变量。

内容的提问来源于stack exchange,提问作者Brian Holsen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 15:23:21