小编典典

将WHERE子句与BETWEEN和null日期参数一起使用

sql

我的WHERE条款之一是:

AND (DateCreated BETWEEN @DateFrom and @DateTo OR (@DateFrom IS NULL OR @DateTo IS NULL))

@DateFrom@DateTo是可能是的输入参数NULL

如果它们都为null,则基本上需要忽略BETWEEN和返回所有记录。

如果@DateFromNULL,但是@DateToNOT NULL,那么我需要返回DateCreated不大于@DateTo(包括)的所有记录。

如果@DateFromNOT NULL,但是@DateToNULL,那么我需要返回所有记录,其中DateCreated不得早于@DateFrom(包括)直到今天的日期。

DateCreated不是null或有时是null字段。

到目前为止,我的WHERE子句无法完全按照我的要求运行。


阅读 212

收藏
2021-03-23

共1个答案

小编典典

当一个或另一个是NULL:时,只需要一些额外的条件即可处理:

AND (
    (DateCreated >= @DateFrom and DateCreated < DATEADD(day,1,@DateTo)) 
 OR (@DateFrom IS NULL AND @DateTo IS NULL)
 OR (@DateFrom IS NULL AND DateCreated < DATEADD(day,1,@DateTo))
 OR (@DateTo IS NULL AND DateCreated >= @DateFrom)
    )

编辑:Giorgi的方法更简单,在这里它适用于DATETIME

AND (       (DateCreated >= @DateFrom OR @DateFrom IS NULL) 
        AND (DateCreated < DATEADD(day,1,@DateTo) OR @DateTo IS NULL)
    )

BETWEEN或对字段<=使用DATE变量时的问题DATETIME是,将排除最后一天午夜之后的任何时间。

'2015-02-11 13:07:56.017' 大于'2015-02-11'
比铸造你的领域作为而DATE作比较,它的性能更好,每天从添加到您的变量和变化<=<

2021-03-23