sql - WHERE 带 CASE 和 null 检查

标签 sql tsql date null where

我对 WHERE 子句中的 CASE 语句有疑问。在我的查询中,我想获取某个日期之前的行。日期是检查 3 列。 date1不是 NULL,所以我不需要 NULL 检查,但日期是 date2date3可以是 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

这在第一次给出错误: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'.

最佳答案

这应该有效:

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

关于sql - WHERE 带 CASE 和 null 检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13321876/

相关文章:

mysql - phpMyAdmin 的替代方案

sql - 如何将 .sql 脚本拆分为多个文件?

database - 是否可以更改 View 中列的数据类型?

java - 如何获取给定季度的月份

mysql - SQL 条件内连接

sql - 选择具有随机 ID 的不同名称

MySql 合并来自同一个表的记录

sql - 获取 2 个日期之间每月的准确日期值

php - 如何在mySQL中触发总天数

ios - NSDateFormatter 根据 iOS 版本返回不同的结果