2011-03-11 64 views
4

這裏有一個表:SQL查詢,如果日期是接近今天

orders(id, item, deliveryDate, courier_id)

我想編寫一個查詢將返回所有訂單與交貨日期定快遞的內今天的一個月。我怎麼做?

+0

什麼數據庫?你到目前爲止嘗試過什麼嗎? – 2011-03-12 00:00:39

+0

我相信這將取決於您使用的是哪個DBMS。 – JOTN 2011-03-12 00:02:18

回答

1

在T-SQL:

SELECT * 
FROM orders 
WHERE deliveryDate BETWEEN GETDATE() AND GETDATE() + 30 
    AND courier_id = @CourierID 

EDIT

雖然在該溶液中的週期被計算爲粗略地一個月,它不是正好一個月份,如叔叔布拉德已經觀察到整齊。如果您需要精確,則應從當前日期計算一個月,如下所示:DATEADD(month, 1, GETDATE())。這在上述查詢中替換GETDATE() + 30

+1

不是每個月都有30天。你應該使用'dateadd(MONTH,1,getdate())'代替'getdate()+ 30'。 – 2011-03-17 20:13:55

+0

@uncle brad:不一定我應該。舉例來說,如果我想將數據表示爲一張圖表,顯示每一天在未來一段時間內將安排多少次交貨,如果這段時間是固定的,那麼在我看來,這似乎更有意義。不過,你的觀點是有效的,因爲我們實際上不知道這個案例的要求,所以我已經更新了我的答案。謝謝。 – 2011-03-17 20:55:47

1

大多數服務器使用日期的整數部分天數。

在本例中,我使用「Now()」作爲返回當前日期的服務器函數。 你應該在你使用的服務器的文檔上看看正確的一個。

(也標記爲快遞id的值?)

Select * 
From orders 
Where Now() - deliveryDate < 30 
And courier_id = ? 

如果您的服務器不持有天 - 你可以看看它的日期轉換函數

0

如果MySQL

DATE_ADD

SELECT * FROM orders WHERE deliveryDate BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 1 MONTH);