我有一个SQL语句:
UPDATE informix.dv_billing dv
SET dv.fee = CASE WHEN ((SELECT dc.mm_discount
FROM dv_mm_disc dc
WHERE dc.year = YEAR(dv.tdate)
AND dc.quarter = quarter(dv.tdate)
AND dc.bid=dv.bid
AND dc.mm_code=dv.pcode
AND dc.ins=dv.ins) = 0)
THEN dv.fee ELSE 0
END
WHERE MDY(MONTH('2012-04-05'), 1, YEAR('2012-04-05')) - 2 UNITS MONTH
AND last_day(DATE('2012-04-05'))
;
SQL返回错误:
Result of a boolean expression is not of boolean type.
可能出现什么问题?
答案 0 :(得分:0)
我认为你遇到了外(主)WHERE子句的问题。
您的名义条件是:
WHERE expr1 AND expr2
这需要 expr1 和 expr2 都是布尔表达式,但实际的表达式不是布尔值 - 因此有点奇怪的措辞错误信息。
表达式:
MDY(MONTH('2012-04-05'), 1, YEAR('2012-04-05')) - 2 UNITS MONTH
给出DATE(或可能是DATETIME YEAR TO DAY)结果。假设last_day()
函数返回包含给定日期的月份中最后一天的日期是合理的。
也许最后一个AND应该是=
?
WHERE MDY(MONTH('2012-04-05'), 1, YEAR('2012-04-05')) - 2 UNITS MONTH = last_day(DATE('2012-04-05'))
可以缩写为:
WHERE MDY(4, 1, 2012) - 2 UNITS MONTH = last_day(DATE('2012-04-05'))
我不确定这种情况何时会映射到真实......但这是一个单独的讨论。我确实认识到'2012-04-05'可能是一个查询参数,为了提问而简化,所以缩写不是一般的有效,但我似乎不太可能一个月的第一天任何月份的最后一天(但很多都取决于last_day()
函数中的内容。)