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'.
这应该工作:
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)