Informix SQL Help:布尔表达式的结果不是布尔类型

时间:2013-03-31 16:50:08

标签: sql informix

我有一个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.

可能出现什么问题?

1 个答案:

答案 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()函数中的内容。)