2012-03-01 69 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回答。