2015-03-04 3 views
0

Я хочу ограничить пользователя тем, что вы не можете найти временной интервал более года. Таким образом, 1/1/2014 - 1/1/2015 действителен, но 1/1/2014 - 3/1/2015 недействителен. Они вводят даты в сборщике дат в отчете SSRS.Ограничения диапазона дат SQL Server

WHERE "view"."myDate" between @firstDate and @secondDate 

Есть ли логика я могу положить в WHERE причин, которые могут поставить эти ограничения в аффекте?

ответ

4

Вы можете добавить DATEDIFF в предложение WHERE, чтобы ограничить диапазон до года;

AND DATEDIFF(d, @firstDate, @secondDate) < 366 

Однако это не вернет ничего, если диапазон превышает год. Если вы хотите, чтобы запрос возвращался на летние результаты, вы могли бы использовать что-то вроде этого;

WHERE "view"."myDate" between @firstDate and 
    CASE 
     WHEN DATEDIFF(d, @firstDate, @secondDate) < 366 THEN @secondDate 
     ELSE DATEADD(d, 365, @firstDate) 
    END 

Если вы хотите, чтобы вызвать ошибку, если пользователь предоставляет неверный диапазон, то вам придется использовать хранимую процедуру для источника данных и выполнить проверку параметров. Что-то вроде этого;

CREATE PROC dbo.GetMyData (@firstDate date, @secondDate) AS 
BEGIN 

    IF (DATEDIFF(d, @firstDate, @secondDate) > 365) 
    BEGIN 
     RAISERROR('Please restrict searches to less than a year.', 16, 1) 
     RETURN 
    END 

    SELECT ... 
    WHERE "view"."myDate" between @firstDate and @secondDate 

END 
Смежные вопросы