我的WHERE条款之一是:
WHERE
AND (DateCreated BETWEEN @DateFrom and @DateTo OR (@DateFrom IS NULL OR @DateTo IS NULL))
@DateFrom和@DateTo是可能是的输入参数NULL。
@DateFrom
@DateTo
NULL
如果它们都为null,则基本上需要忽略BETWEEN和返回所有记录。
BETWEEN
如果@DateFrom是NULL,但是@DateTo是NOT NULL,那么我需要返回DateCreated不大于@DateTo(包括)的所有记录。
NOT NULL
如果@DateFrom是NOT NULL,但是@DateTo是NULL,那么我需要返回所有记录,其中DateCreated不得早于@DateFrom(包括)直到今天的日期。
DateCreated不是null或有时是null字段。
到目前为止,我的WHERE子句无法完全按照我的要求运行。
当一个或另一个是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:
DATETIME
AND ( (DateCreated >= @DateFrom OR @DateFrom IS NULL) AND (DateCreated < DATEADD(day,1,@DateTo) OR @DateTo IS NULL) )
BETWEEN或对字段<=使用DATE变量时的问题DATETIME是,将排除最后一天午夜之后的任何时间。
<=
DATE
'2015-02-11 13:07:56.017' 大于'2015-02-11' 比铸造你的领域作为而DATE作比较,它的性能更好,每天从添加到您的变量和变化<=来<。
'2015-02-11 13:07:56.017'
'2015-02-11'
<