Microsoft SQL Server中比较日期时间变量报错的解决方法
问题解决
核心错误原因
- 转义字符误用:代码里用了HTML转义符
<代替实际的小于号<,SQL Server无法识别该转义符,这是触发语法错误的直接原因。 - 布尔值返回限制:即使替换成
<,直接执行SELECT (@order_date < @today_date)也会报错——SQL Server不支持在结果集中直接返回布尔类型,需要把布尔表达式转换为BIT类型或用CASE语句返回1/0。
修正后的代码
DECLARE @today_date DATETIME = GETDATE(), @order_date DATETIME = GETDATE(); SELECT @order_date = order_date FROM app_orderbook WHERE order_no = 1; -- 方式1:转换为BIT类型返回结果 SELECT CAST(CASE WHEN @order_date < @today_date THEN 1 ELSE 0 END AS BIT) AS IsOrderDateEarlier; -- 方式2:直接返回1(真)/0(假) SELECT CASE WHEN @order_date < @today_date THEN 1 ELSE 0 END AS IsOrderDateEarlier;
额外排查点(若注释最后一条SELECT仍报错)
- 确认
app_orderbook表存在,且order_no、order_date字段名称、类型完全匹配(你提到order_date属于tblOrders表,但代码里用的是app_orderbook,这里可能存在表名混淆)。 - 检查DECLARE语句的语法,多变量声明的逗号分隔格式是否正确,变量名无拼写错误。
内容的提问来源于stack exchange,提问作者Srikanth S
相关产品推荐
相关产品推荐

