1

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

有什么问题?

4

1 回答 1

0

我认为您遇到了外部(主要)WHERE 子句的问题。

您有一个名义上的条件:

WHERE expr1 AND expr2

这要求expr1expr2都是布尔表达式,但实际表达式不是布尔表达式——因此会出现措辞有点奇怪的错误消息。

表达方式:

MDY(MONTH('2012-04-05'), 1, YEAR('2012-04-05')) - 2 UNITS MONTH

给出 DATE(或可能是 DATETIME YEAR TO DAY)结果。可以合理地假设该last_day()函数返回包含给定日期的月份中最后一天的日期。

也许最后一个应该是=

 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'))

我不确定该条件何时会映射到 true ......但这是一个单独的讨论。我确实认识到 '2012-04-05' 可能是一个查询参数,为了提出问题而进行了简化,所以这个缩写不是通用的,但我似乎不太可能一个月的第一天是任何一个月的最后一天(但很大程度上取决于该last_day()函数中的内容)。

于 2013-03-31T17:40:55.353 回答