Sql 其中包含大小写和空检查
我对WHERE子句中的CASE语句有问题。在我的查询中,我希望得到日期之前的行。日期在3列上进行检查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
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'))