我有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为空
因此,由于columnC是空的,所以应该出现该项。我做错什么了?
谢谢,
我正在使用2008
发布于 2014-10-30 17:01:04
您的问题描述和代码在“更大”-子句的关联中存在差异,因此答案也不是明确的。请明确你的问题,以防万一-也请参阅前一个意见的优化提示。
( 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())
)发布于 2014-10-30 16:31:55
听起来你真的很想在子句之间使用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()) )发布于 2014-10-30 16:33:39
如果A列为空,或如果C列日期大于今天,则减去3天,如果B列为空,或如果C列日期大于今天,则为减去3天,如果C列为空,或如果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,如果您想检索与任何条件匹配的数据,请使用OR而不是AND。
https://stackoverflow.com/questions/26657816
复制相似问题