我是TSQL的新手。 我需要编写一个返回过滤记录的存储过程。 因此用户有两个日期要输入。他只能输入一个,两个,或两个,或任何一个。
在存储过程中,我有两个参数@From,@ To - date type。 我需要搜索记录。
如果用户没有输入日期 - 我不关心选择查询中的日期。
如果用户输入了2个日期 - 我需要包含它们进行搜索。
如果用户输入@From日期 - 我需要搜索到今天为止。
如果用户输入@To日期 - 我需要搜索小于@To的日期。
感谢您的帮助。
答案 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)