Необязательные параметры сервера SQL: синтаксис для предложения Между - PullRequest
3 голосов
/ 15 апреля 2010
@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 ]

4 голосов
/ 15 апреля 2010

Попробуйте что-то вроде

SELECT * FROM TABLE 
WHERE .... 
AND [PI].Date BETWEEN ISNULL(@FromDate, [PI].Date) AND ISNULL(@ToDate, [PI].Date)
2 голосов
/ 15 апреля 2010

вы всегда можете по умолчанию установить значения даты на какое-то предельное значение и убедиться, что используется индекс:

SELECT 
    * 
    FROM TABLE 
    WHERE .... 
        AND [PI].Date BETWEEN ISNULL(@FromDate,convert(datetime,'1/1/1800'))
                          AND ISNULL(@ToDate, convert(datetime,'1/1/2500'))
1 голос
/ 16 апреля 2010
SELECT * FROM [PI]
WHERE ([PI].Date >= @FromDate OR @FromDate IS NULL)
AND ([PI].Date <= @ToDate OR @ToDate IS NULL)
1 голос
/ 15 апреля 2010

Вы можете попробовать что-то вроде этого:

@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

НТН

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...