我有3列,我们称之为column A
,column B
和column C
,每列都是日期。
我正在尝试写下这样的逻辑:
如果列A为NULL或者列C日期大于今天的当天减去3天
如果列B为NULL或者列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
答案 0 :(得分:2)
听起来你真的想在你的条款之间使用OR
而不是AND
。
( columnA IS NULL OR columnA >= Dateadd(day, -3, Getdate()) )
OR
( columnB IS NULL OR columnB >= Dateadd(day, -3, Getdate()) )
OR
( columnC IS NULL OR columnC >= Dateadd(day, -3, Getdate()) )
答案 1 :(得分:1)
您的问题描述和您的代码在'more'子句的关联方面有所不同,因此答案也不是明确的。请详细说明您的问题 - 也请参阅前评论的优化提示。
a)这应该是对您的描述的逻辑上正确的答案:
WHERE ( columnA IS NULL OR columnB IS NULL OR columnC IS NULL OR columnC >= Getdate()-3 )
b)从您的代码中得出,这应该是逻辑上正确的答案(但尚未优化):
WHERE ( columnA IS NULL OR columnA >= Dateadd(day, -3, Getdate())
OR columnB IS NULL OR columnB >= Dateadd(day, -3, Getdate())
OR columnC IS NULL OR columnC >= Dateadd(day, -3, Getdate())
)
答案 2 :(得分:0)
如果列A为NULL或者列C日期大于今天'今天减去3天如果列B为NULL或者列C日期大于今天' s今天减去3天如果列C为NULL或者如果C列日期大于今天减去3天
( columnA IS NULL
OR columnC >=
Dateadd(day, -3, Getdate()) )
AND ( columnB IS NULL
OR columnC >=
Dateadd(day, -3, Getdate()) )
AND ( columnC IS NULL
OR columnC >=
Dateadd(day, -3, Getdate()) )
如果您想要检索满足任何一个条件的数据而使用AND
而不是{{ 1}}