SQL Server中CASE语句内日期列减整数列报错如何解决
问题根源
DATEADD函数参数顺序错误,T-SQL中DATEADD的语法为DATEADD(时间单位, 偏移量, 原始日期),你错误将原始日期列作为偏移量、整数字段作为原始日期传入,触发了日期转整数、整数转日期的类型转换报错- ELSE分支直接对日期列和整数字段做减法,仅
datetime、smalldatetime两种旧日期类型支持和整数直接运算,如果你使用的是date、datetime2等新日期类型,该写法会直接触发隐式转换错误 - 你调整方括号无效是因为问题和方括号无关,方括号仅用来处理带空格/特殊字符的标识符,不影响类型转换逻辑
修正方案
所有分支统一使用DATEADD处理日期减法,避免隐式转换问题:
CASE WHEN EVT = 'x' THEN DATEADD(DAY, -[INTEGER COLUMN], [DATE COLUMN]) ELSE DATEADD(DAY, -[INTEGER COLUMN], [DATE COLUMN 2]) END AS y
如果业务逻辑中两个分支的偏移方向不同,按需调整偏移量的正负即可。
内容的提问来源于stack exchange,提问作者OJJ
相关产品推荐
相关产品推荐

