Ton*_*ich 6 sql t-sql sql-server sql-server-2008
使用SQL Server 2008.我有一个存储过程,它有开始和结束日期作为日期范围的输入参数.
在where子句中查找具有开始日期和结束日期之间的单个 sql查询,该查询可以处理日期为空或两者都具有值的两种情况.
我不想使用IF语句.
Qua*_*noi 12
WITH limits AS
(
SELECT COALESCE(@startDate, MIN(mydate)) AS startDate, COALESCE(@endDate, MAX(mydate)) AS endDate
FROM mytable
)
SELECT m.*
FROM limits
JOIN mytable m
ON mydate BETWEEN startDate AND endDate
Run Code Online (Sandbox Code Playgroud)
如果有索引mydate,这将是最有效的,因为这个条件是sargable并将使用Index Seek.
如果没有索引,则使用IFNULL其他人提出的构造.
Mit*_*eat 10
你可以这样做:
SELECT blah
FROM MyTable
WHERE
(@startDate IS NULL OR MyTable.StartDate >= @startDate)
AND (@endDate IS NULL OR MyTable.EndDate <= @endDate)
Run Code Online (Sandbox Code Playgroud)
但请注意,像这样的AND子句中的大量参数可能导致错误地缓存查询计划.关于错误的查询计划和参数'嗅探',有很多问题.