【发布时间】:2020-03-04 19:54:47
【问题描述】:
当我运行以下 case 语句时,我收到错误“将 varchar 值“NO”转换为数据类型 int 时转换失败”。有人可以告诉我我在这里做错了什么吗?谢谢
,CASE
WHEN DATEDIFF(DAY, convert(VARCHAR, Deliveries.DUE_DATE, 10), convert(VARCHAR, DELIVERIES.OB_DELIVERY_DATE, 10)) > 0
THEN DATEDIFF(DAY, convert(VARCHAR, Deliveries.DUE_DATE, 10), convert(VARCHAR, DELIVERIES.OB_DELIVERY_DATE, 10))
WHEN DATEDIFF(DAY, convert(VARCHAR, Deliveries.DUE_DATE, 10), convert(VARCHAR, DELIVERIES.OB_DELIVERY_DATE, 10)) < 0
THEN DATEDIFF(DAY, convert(VARCHAR, Deliveries.DUE_DATE, 10), convert(VARCHAR, DELIVERIES.OB_DELIVERY_DATE, 10))
ELSE 'NO'
END AS DAYS_BEFORE_DUE_DATE
【问题讨论】:
-
一个
CASE表达式只能返回一种数据类型,它使用Data Type Precedence来确定返回数据类型。对于上述内容,您有一些int值,然后是'NO',即varchar(2)。显然'NO'不能转换为int,因此会出现错误。我建议返回NULL,如果您需要显示“否”,请在显示层中处理。 -
非常感谢您的回复。非常感谢您的帮助。
-
这完全没有意义。将日期转换为字符串以作为日期函数的参数调用?