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()関数が、指定された日付を含む月の最終日の日付を返すという仮説を立てるのは合理的です。

たぶん、最後の 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'))

その条件がいつ true にマップされるかはわかりませんが、それは別の議論です。「2012-04-05」は質問をする目的で単純化されたクエリ パラメータである可能性が高いことは認識しています。任意の月の最終日 (ただし、多くはそのlast_day()関数の内容に依存します)。

于 2013-03-31T17:40:55.353 に答える