编写单个查询以在两个日期之间进行搜索,并且当日期不可用时,它应该搜索大于第一个日期。
例如:在两个日期之间进行搜索,当日期和日期都可用时
11-10-2015 to 11-10-2017
我的查询也应该在没有日期时返回结果
例如:我想编写单个查询而不使用if和else
答案 0 :(得分:1)
此代码有效,并且根据要求是单个语句。
来自MyTable WHERE的SELECT *记录BETWEEN COALESCE(@ startdate,CAST('01 / 01/1753 00:00:00.000'AS DATETIME))和 COALESCE(@ enddate,CAST ('12 / 31/9999 23:59:59.997'作为日期时间))
如果开始日期为NULL,则COALESCE将返回SQL Server定义的最小日期值。否则,它返回发送的开始日期值。
如果结束日期为NULL,则COALESCE将返回SQL Server定义的最大日期值。否则,它返回发送的结束日期。
随意将MIN和MAX可能日期的COALESCE语句转换为函数,因为SQL Server没有最小和最大可能日期的内置函数。
以这种方式编写代码可以让您始终执行BETWEEN。
答案 1 :(得分:0)
尝试以下逻辑
DECLARE @FromDt DATE='01/01/2017',@ToDate DATE = NULL
SELECT
*
FROM YourTable
WHERE FromDate > @FromDate
AND
(
@ToDate IS NULL
OR
(
@ToDate IS NOT NULL
AND
ToDate > @ToDate
)
)
答案 2 :(得分:0)
declare @dt_from date = '20151011',
@dt_to date = '20171011' -- null
select *
from dbo.your_table
where date_field >= @dt_from and data <= isnull(@dt_to, '99990101');