在哪里使用CASE和空检查

Rob*_*roj 2 sql t-sql null date where

我在WHERE子句中的CASE语句有问题.在我的查询中,我想获得日期之前的行.日期检查3列.date1是NOT NULL所以我不需要有一个NULL检查,但日期date2,date3可以是NULL所以我想检查空值,并相应地检查日期条件.我尝试了两种方法,但无法弄清楚如何正确地做到这一点.你能帮我吗?

查询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
Run Code Online (Sandbox Code Playgroud)

这在以下情况下给出了错误: 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
Run Code Online (Sandbox Code Playgroud)

并得到另一个错误: An expression of non-boolean type specified in a context where a condition is expected, near 'END'.

Tim*_*ter 7

这应该工作:

SELECT *
FROM
    docs
WHERE (date1 < '20120601')
OR    (date2 IS NOT NULL AND date2 < '201205601')
OR    (date2 IS NULL AND date3 IS NOT NULL AND date3 < '20120601')
Run Code Online (Sandbox Code Playgroud)