代码之家  ›  专栏  ›  技术社区  ›  A G

SQL Server可选参数:BETWEEN子句的语法

  •  3
  • A G  · 技术社区  · 15 年前
    @FromDate datetime = null
    @ToDate datetime = null
    
    SELECT * FROM TABLE
    WHERE ....
    AND [PI].Date BETWEEN @FromDate AND @ToDate
    

    如果任何日期为空,则不显示记录。什么是正确的语法,以便我可以得到所有记录,如果任何日期是空的。

    我想到过:

    @FromDate datetime = '01/01/1901',
    @ToDate datetime = '12/31/9999'
    

    谢谢。

    4 回复  |  直到 15 年前
        1
  •  4
  •   Adriaan Stander    15 年前

    试试像这样的

    SELECT * FROM TABLE 
    WHERE .... 
    AND [PI].Date BETWEEN ISNULL(@FromDate, [PI].Date) AND ISNULL(@ToDate, [PI].Date)
    
        2
  •  2
  •   KM.    15 年前

    您始终可以将日期值默认为某个极值,并确保使用索引:

    SELECT 
        * 
        FROM TABLE 
        WHERE .... 
            AND [PI].Date BETWEEN ISNULL(@FromDate,convert(datetime,'1/1/1800'))
                              AND ISNULL(@ToDate, convert(datetime,'1/1/2500'))
    
        3
  •  1
  •   Raja    15 年前

    你可以试试这样的方法:

    @FromDate datetime = null
    @ToDate datetime = null
    
    SELECT * FROM TABLE
    WHERE ....
    AND [PI].Date BETWEEN CASE WHEN @FromDate is null THEN '01/01/1901' ELSE @FromDate END AND 
    CASE WHEN @ToDate is null THEN '12/31/9999' ELSE @ToDate END
    

    高温高压

        4
  •  1
  •   Anthony Faull    15 年前
    SELECT * FROM [PI]
    WHERE ([PI].Date >= @FromDate OR @FromDate IS NULL)
    AND ([PI].Date <= @ToDate OR @ToDate IS NULL)