检查是否将日期参数传递给存储过程的时间超过一年

时间:2016-11-29 21:13:53

标签: sql sql-server transactional

我有一个存储过程,其中包含一个当前将历史查询限制为前一年的变量。

来自用户的询问是,我们允许回溯2年但如果传递给相关程序的日期范围在去年之内,出于性能原因,我们仍然将搜索到的数据集限制为过去一年。

我们目前使用此变量

将查询限制为过去一年
 SET @yearago = CONVERT(numeric(8,0), CONVERT(char(8),       
 DATEADD(yy,-1,GETDATE()),112)) 

我知道我可以将DATEADD参数设置为-2来增加数据集,但我需要找到一种优雅,轻量级的方法来确定何时应该根据fromDate执行此操作。事务性sql不是我的强项,我找不到它的日期比较的好例子。我想这对一些sql爱好者来说很简单。

2 个答案:

答案 0 :(得分:0)

DATEDIFF(d, @RequestedDate, GETDATE())

如果它大于365,则超过一年。希望有所帮助!

答案 1 :(得分:0)

像“if / then语句”这样的东西应该有用......这是我在报告运行的那天使用的一个例子。您可以将DateName函数更改为DW(星期几)或类似月份,年份或其他任何内容,与您尝试作为参数提取的日期进行比较...

Declare @DateTo as Date
Declare @DateFrom as Date

DECLARE @dayName VARCHAR(9);
SET @dayName = DATEName(DW, GETDATE());



IF(@dayName = 'Monday')
Begin 
    Set @DateTo = GETDATE()
    Set @DateFrom = DateAdd(dd,-3,GETDATE())
End
Else  
IF(@dayName <> 'Monday') 
Begin
    Set @DateTo = GETDATE()
    Set @DateFrom = DateAdd(dd,-1,GETDATE())
End