t-sql условная обработка даты - PullRequest
1 голос
/ 11 января 2012

У меня есть хранимая процедура, которая возвращает данные, использованные в отчете. Пользователь может указать множество параметров, два из которых являются начальной и конечной датой. Я могу использовать оператор WHERE create_date BETWEEN @arg_start AND @arg_end для фильтрации по датам.

Что я не знаю, как это сделать, так это справиться с ситуацией, когда пользователь не указывает даты. CASE не поддерживает ничего типа WHERE create_date = CASE @arg_start WHEN NULL THEN create_date ELSE BETWEEN @arg_start AND @arg_end.

Я провел много исследований в Google, MSDN, и здесь, и я не нашел, чтобы справиться с условной нулевой обработкой даты и времени. Хотя я знаю, что это плохая форма, я могу передать программную передачу в магическую дату, такую ​​как 01.01.1900, для проверки вместо нуля, но это не очень помогает при обработке условной даты.

Ответы [ 3 ]

3 голосов
/ 11 января 2012

Примерно так:

where (create_date >= @arg_start or @arg_start is null) and
      (create_date <= @arg_end or @arg_end is null)

Если вы используете SQL Server 2008, вы должны использовать OPTION (RECOMPILE).Ссылка: Условия динамического поиска в версии T-SQL для SQL 2008 (SP1 CU5 и более поздних версий) .

В противном случае вам может быть лучше использовать ответ , предоставленный JNK .

3 голосов
/ 11 января 2012

Сделать условие из нескольких частей:

WHERE
    (@argstart IS NULL AND @argend IS NULL)
OR  (@argend IS NULL AND create_date > @Argstart)
OR  (@argstart IS NULL AND create_date < @argend)
OR  (Createdate BETWEEN @Argstart AND @Argend)
2 голосов
/ 11 января 2012

Я бы сделал значения по умолчанию для параметров хранимой процедуры "волшебными датами":

CREATE PROC usp_report 
    @StartDate datetime = '1900-01-01', 
    @EndDate datetime = '9999-12-31' 

AS

SELECT * 
FROM MyTable 
WHERE DateField BETWEEN @Startdate AND @EndDate

В вашем приложении, если пользователь не указал дату, не передавайте этот параметр всохраненный процесс

Это обеспечит чистоту кода вашего приложения и даст вам необходимые данные.

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