我有一些數據庫記錄,其中一列包含添加記錄的日期(稱爲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