筛选可为空的参数SQL的可空列

时间:2013-08-04 10:27:41

标签: sql-server tsql sql-server-2008-r2

我有StartDate&表中的EndDate列,它们可以为空,我将两个参数传递给存储过程来过滤该表,参数可以为空值,并且列也可以为空,如我所述。

在这种情况下如何使用条件WHERE子句编写SQL语句以使日期大于或等于StartDate且日期小于或等于EndDate?< / p>

这是我到目前为止所做的:

SELECT StartDate, EndDate FROM Table1
WHERE     (StartDate >= Convert(DateTime, @dtFrom) OR StartDate IS NOT NULL ) AND 
      (EndDate <= Convert(DateTime, @dtTo) OR EndDate IS NOT NULL )

1 个答案:

答案 0 :(得分:1)

如果null参数表示'不对该参数进行过滤',列中的空值表示正/负无穷大,则这是您可能想要使用的查询:

select StartDate, EndDate
from Table1
where 
   (@dtFrom is null or StartDate is null or StartDate >= Convert(DateTime, @dtFrom)) and 
   (@dtTo is null or EndDate is null or EndDate <= Convert(DateTime, @dtTo))