日期范围限制SQL Server

时间:2015-03-04 15:19:36

标签: sql-server date reporting-services where

我想限制用户无法搜索超过一年的时间范围。因此1/1/20141/1/2015有效,但1/1/20143/1/2015无效。他们在SSRS报告中的日期选择器中输入日期。

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

我是否可以将WHERE原因置于可以影响这些限制的原因中?

1 个答案:

答案 0 :(得分:4)

您可以在WHERE子句中添加DATEDIFF项检查,以将范围限制为一年;

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