我有一些数据库记录,其中一列包含添加记录的日期(称为COMP_DATE)。基于过去的日期检索SQL记录?
我需要做一个查询,这将运行每一天,它会选择COMP_DATE正好n年,11个月和15天前(在24小时窗口内)的记录。 (在n年前的前15天)。
这样做的最好方法是什么?我应该减去(n * 356 - 15天)?我怎么做到这一点?
谢谢。
我有一些数据库记录,其中一列包含添加记录的日期(称为COMP_DATE)。基于过去的日期检索SQL记录?
我需要做一个查询,这将运行每一天,它会选择COMP_DATE正好n年,11个月和15天前(在24小时窗口内)的记录。 (在n年前的前15天)。
这样做的最好方法是什么?我应该减去(n * 356 - 15天)?我怎么做到这一点?
谢谢。
最好的办法,是做周围的其他方法来获得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()));
的空间更小
希望有帮助;)
有功能做日期arythmetic。例如,Dateadd
(假设这是基于问题的标签的Microsoft SQL Server。)
我知道这些功能,但不确定是否采用日间辅助方法是最好的方法,因为一年不完全是365天,而我的搜索可能会回溯到6年,这不仅会导致天。如果我做年/月减法,我可能会错过闰日,或者有31天的月份的最后一天。 – 2012-03-01 23:16:55
select * from records where
comp_date = dateadd(year,-n,dateadd(month,-11,dateadd(days, -15, GetDate())));
* assumimg comp_date是Date类型的。
如果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回答。
关于您对@theglauber的回复,那么您认为在n年,11个月和15天前,您到底是什么?你担心闰年吗?你想跳过去年的闰年,如果超过4年前跳过两天(因为会发生两次闰年)?也许你可以展示一些有问题的日期,你期望在这些日期返回什么日期,以及你尝试了哪些查询。 – 2012-03-02 00:10:32