两个日期之间的sql可以为null

时间:2014-01-20 11:20:34

标签: sql-server tsql select where

我是TSQL的新手。 我需要编写一个返回过滤记录的存储过程。 因此用户有两个日期要输入。他只能输入一个,两个,或两个,或任何一个。

在存储过程中,我有两个参数@From,@ To - date type。 我需要搜索记录。

如果用户没有输入日期 - 我不关心选择查询中的日期。

如果用户输入了2个日期 - 我需要包含它们进行搜索。

如果用户输入@From日期 - 我需要搜索到今天为止。

如果用户输入@To日期 - 我需要搜索小于@To的日期。

感谢您的帮助。

2 个答案:

答案 0 :(得分:11)

SELECT ColumnList
FROM MyTable
WHERE
    (@FromDate IS NULL OR FromDateColumn >= @FromDate)
    AND (@ToDate IS NULL OR ToDateColumn <= @ToDate )

(但请注意,由于参数嗅探,这可能会受到不合适的缓存查询计划的影响,特别是如果WHERE子句中存在大量参数条件)

答案 1 :(得分:1)

SELECT 
   Columns
FROM  
   Table
WHERE 
   DateColumn BETWEEN (CASE WHEN @FromDate IS NULL THEN DateColumn ELSE @FromDate END)
   AND (CASE WHEN @ToDate IS NULL THEN DateColumn ELSE @ToDate END)