2012-03-01 71 views
1

我有一些数据库记录,其中一列包含添加记录的日期(称为COMP_DATE)。基于过去的日期检索SQL记录?

我需要做一个查询,这将运行每一天,它会选择COMP_DATE正好n年,11个月和15天前(在24小时窗口内)的记录。 (在n年前的前15天)。

这样做的最好方法是什么?我应该减去(n * 356 - 15天)?我怎么做到这一点?

谢谢。

+0

关于您对@theglauber的回复,那么您认为在n年,11个月和15天前,您到底是什么?你担心闰年吗?你想跳过去年的闰年,如果超过4年前跳过两天(因为会发生两次闰年)?也许你可以展示一些有问题的日期,你期望在这些日期返回什么日期,以及你尝试了哪些查询。 – 2012-03-02 00:10:32

回答

1

最好的办法,是做周围的其他方法来获得n年11个月零14天以前 删除N + 1年,并增加15天,你就会有错误

DECLARE @n as INT=<your value here>; 

SELECT * 
FROM records 
WHERE comp_date BETWEEN Dateadd(DAY, 15, Dateadd(YEAR, [email protected], Getdate())) 
    AND Dateadd(DAY, 16, Dateadd(YEAR, [email protected], Getdate())); 
的空间更小

希望有帮助;)

0

有功能做日期arythmetic。例如,Dateadd

(假设这是基于问题的标签的Microsoft SQL Server。)

+0

我知道这些功能,但不确定是否采用日间辅助方法是最好的方法,因为一年不完全是365天,而我的搜索可能会回溯到6年,这不仅会导致天。如果我做年/月减法,我可能会错过闰日,或者有31天的月份的最后一天。 – 2012-03-01 23:16:55

0
select * from records where 
comp_date = dateadd(year,-n,dateadd(month,-11,dateadd(days, -15, GetDate()))); 

* assumimg comp_date是Date类型的。

0

如果comp_date是日期时间列类型,则需要在范围(24小时范围)上进行搜索。另外,如果你是之前N年前找了15天,查询应该是这样的:

select * from records where 
comp_date >= dateadd(year,-n,dateadd(day, -15, getdate())) 
and comp_date < dateadd(year,-n,dateadd(day, -14, getdate())); 

如果确实是你想要前n年11个月零15天,使用WOPRs回答。