SQL执行报错:varchar值'ONWARDS'转换为int类型失败如何解决
报错原因
报错是因为IIF函数的两个返回分支数据类型不匹配导致的:
- 条件成立时返回的
LEAD(moreThanDay)是int类型 - 条件不成立时返回的
'ONWARDS'是varchar类型
SQL Server会自动尝试将两个返回值统一转为优先级更高的int类型,转换字符串'ONWARDS'时就触发了报错。
解决方案
只需要将int类型的返回值显式转为字符串类型即可,修正后的SQL如下:
SELECT description, moreThanDay, CONCAT(moreThanDay+1,' - ' , IIF(LEAD(moreThanDay) OVER (ORDER BY moreThanDay) > 0, CONVERT(VARCHAR(10), LEAD(moreThanDay) OVER (ORDER BY moreThanDay)),'ONWARDS')) AS rangeDay FROM EquipmentOwnerDetention WHERE equipmentOwnerCode=@equipmentOwnerCode
也可以用CAST函数完成转换,效果完全一致:
CAST(LEAD(moreThanDay) OVER (ORDER BY moreThanDay) AS VARCHAR(10))
显式指定两个返回分支的类型均为字符串后,IIF就不会触发隐式类型转换,拼接后的rangeDay字段也会是你需要的字符串格式。
内容的提问来源于stack exchange,提问作者Intan Nur Shafienaz
相关产品推荐
相关产品推荐

