我有3列,让我们打电话给他们column A
,column B
和column C
每列是一个日期。SQL - 问题与WHERE逻辑
我想写的,其中的逻辑是这样的:
如果A列是NULL,或者如果C列日期比今天的今天减去3天更大
如果B栏为空或如果C列日期大于今天的今天减去3天
如果列C是NULL,或者列C日期比今天的今天减去3天
我已经想出了这一点,但更多的时候我跑了,我丢失的物品:
(columnA IS NULL OR columnA >= Dateadd(day, -3, Getdate()))
AND
(columnB IS NULL OR columnB >= Dateadd(day, -3, Getdate()))
AND
(columnC IS NULL OR columnC >= Dateadd(day, -3, Getdate()))
这导致冲突,对于一个例子,我有一个项目被丢失,这是为什么:
columnA日期是小于今天的日期减去3天
columnB日期是小于今天的日期减去3天
columnC为NULL
因此,由于columnC为NULL,应该显示该项目。我究竟做错了什么?
感谢,
我使用SQL Server Management Studio 2008中
这是一个全面的查询。它们有点具有挑战性,性能可能非常糟糕。看看这篇文章,它解释了处理这种类型查询的多种方法。 http://sqlinthewild.co.za/index。php/2009/03/19/catch-all-queries/ – 2014-10-30 16:06:52
@ user979331您已经使用了“AND”条件,只有在满足所有3个条件的情况下才会获取数据,因此您提到的缺失数据不符合前2条件不会出现在输出中。使用“OR”条件并查看它是否有效。 – 2014-10-30 16:18:04
发布一些符合条件但不符合条件的样本数据。 – Andrew 2014-10-30 16:23:29