写一个查询以在两个日期之间进行搜索,并且当日期不可用时,它应该搜索大于第一个日期

时间:2017-11-03 05:03:10

标签: sql-server database

编写单个查询以在两个日期之间进行搜索,并且当日期不可用时,它应该搜索大于第一个日期。

例如:在两个日期之间进行搜索,当日期和日期都可用时

11-10-2015 to 11-10-2017

我的查询也应该在没有日期时返回结果

例如:我想编写单个查询而不使用if和else

3 个答案:

答案 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');