WHERE 句の CASE ステートメントに問題があります。私のクエリでは、日付より前の行を取得したいと考えています。日付は 3 列でチェックされます。date1
はNOT NULLなのでNULLチェックは必要ありませんが、日付はdate2
NULLになる可能性があるので、NULLdate3
をチェックしてそれに応じて日付条件をチェックしたいと思います。私は2つのアプローチを試みましたが、それを正しく行う方法がわかりません。手伝ってくれますか?
クエリ 1:
SELECT *
FROM
docs
WHERE
date1 < '20120601'
AND CASE
WHEN date2 IS NOT NULL AND date3 IS NOT NULL THEN date2 < '20120601'
WHEN date2 IS NOT NULL AND date3 IS NULL THEN date2 < '20120601'
WHEN date2 IS NULL AND date3 IS NOT NULL THEN date3 < '20120601'
END
これは、次の場合に最初にエラーを発生させます。Incorrect syntax near '<'.
クエリを次のように変更しました。
SELECT *
FROM
docs
WHERE
date1 < '20120601'
AND CASE
WHEN date2 IS NOT NULL AND date3 IS NOT NULL AND date2 < '20120601' THEN TRUE
WHEN date2 IS NOT NULL AND date3 IS NULL AND date2 < '20120601' THEN TRUE
WHEN date2 IS NULL AND date3 IS NOT NULL AND date3 < '20120601' THEN TRUE
END
別のエラーが発生しました:An expression of non-boolean type specified in a context where a condition is expected, near 'END'.