Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 其中包含大小写和空检查_Sql_Tsql_Date_Null_Where - Fatal编程技术网

Sql 其中包含大小写和空检查

Sql 其中包含大小写和空检查,sql,tsql,date,null,where,Sql,Tsql,Date,Null,Where,我对WHERE子句中的CASE语句有问题。在我的查询中,我希望得到日期之前的行。日期在3列上进行检查date1不为空,因此我不需要进行空检查,但是日期date2和date3可以为空,因此我要检查空值并相应地检查日期条件。我尝试了两种方法,但不知道如何正确地做。你能帮忙吗 问题1: SELECT * FROM docs WHERE date1 < '20120601' AND CASE WHEN date2 IS NOT NULL AND date3

我对WHERE子句中的CASE语句有问题。在我的查询中,我希望得到日期之前的行。日期在3列上进行检查
date1
不为空,因此我不需要进行空检查,但是日期
date2
date3
可以为空,因此我要检查空值并相应地检查日期条件。我尝试了两种方法,但不知道如何正确地做。你能帮忙吗

问题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
选择*
从…起
文件
哪里
日期1<'20120601'
和案例
当date2不为空且date3不为空时,则date2<'20120601'
当date2不为空且date3为空时,则date2<'20120601'
当date2为空且date3不为空时,则date3<'20120601'
结束
当:
靠近'的语法不正确时,第一次出现错误:
这是怎么回事

SELECT *
FROM
    docs
WHERE date1 < '20120601'
  AND ISNULL(date2, '20120601') < '20120601'
  AND ISNULL(date3, '20120601') < '20120601'
选择*
从…起
文件
其中日期1<'20120601'
和ISNULL(日期2,'20120601')<'20120601'
和ISNULL(日期3,'20120601')<'20120601'
这应该可以:

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')
选择*
从…起
文件
其中(日期1<'20120601')
或(日期2不为空且日期2<'201205601')
或(日期2为空,日期3不为空,日期3<'20120601')
在哪里
日期1<'20120601'
和
联合(日期2,日期3,'2000001')<'20120601'
正确答案是:

SELECT *
FROM
    docs
WHERE
    date1 < '20120601' AND
        ((date2 IS NOT NULL AND date3 IS NOT NULL AND date2 < '20120601') OR 
         (date2 IS NOT NULL AND date3 IS NULL AND date2 < '20120601') OR
         (date2 IS NULL AND date3 IS NOT NULL AND date3 < '20120601'))
选择*
从…起
文件
哪里
日期1<'20120601'和
((日期2不为空,日期3不为空,日期2<'20120601')或
(日期2不为空,日期3为空,日期2<'20120601')或
(日期2为空,日期3不为空,日期3<'20120601'))

谢谢,就这样。也许不是100%我想要的,但由于这一点,我在我的业务逻辑中发现了一个错误。现在一切都正常了。谢谢。
where
date1 < '20120601'
    and
coalesce(date2, date3, '20000101') < '20120601'
SELECT *
FROM
    docs
WHERE
    date1 < '20120601' AND
        ((date2 IS NOT NULL AND date3 IS NOT NULL AND date2 < '20120601') OR 
         (date2 IS NOT NULL AND date3 IS NULL AND date2 < '20120601') OR
         (date2 IS NULL AND date3 IS NOT NULL AND date3 < '20120601'))