2012-01-06 109 views
0

我試圖根據當前日期查找記錄。我試圖做的其中一個查詢是找到當前日期7天內的任何記錄。這是我的查找日期早於7日後的日期的記錄。使用日期時間格式

WHERE `Project`.`delivery_deadline` <= 'DATE_SUB(CURDATE(),INTERVAL 7 DAY)' 
GROUP BY `Project`.`id` 
LIMIT 20 

這當然不工作。我究竟做錯了什麼。 delivery_deadline是日期時間格式不是日期格式

+2

世界上的什麼讓你把DATE_SUB(CURDATE(),INTERVAL 7 DAY)放在單引號中? – SergeS 2012-01-06 20:27:48

+1

你爲什麼要在這裏做'GROUP BY'? – 2012-01-06 20:27:53

+0

由於DATE_SUB是一個函數,而不是一個值,你應該刪除引號。我不知道這是否足以解決您的問題,但您也應該在表格結構中包含信息。我們不知道你的日期欄是什麼類型。約會時間? – 2012-01-06 20:29:10

回答

1

你不應該寫:

WHERE `Project`.`delivery_deadline` >= 'DATE_SUB(CURDATE(),INTERVAL 7 DAY)' 

編輯

正確的解決方法是:

WHERE Project.delivery_deadline between now() and date_add(now() ,interval 7 day) 
+0

你是正確的。現在我已經這樣做了,但它仍然沒有完全按照我希望的方式去做。如果你看看上面的評論。我正在嘗試獲取所有記錄,其交付截止日期是從現在開始的7天之前的任何時間。我創建了一個超出本月13日的日期,但它仍然顯示。 delivery_deadline也是日期時間格式,所以我不知道這與它有什麼關係。 – numerical25 2012-01-06 20:56:48

+1

現在()和date_add(now(),間隔7天)之間使用WHERE Project.delivery_deadline是不是更好? – Gianluca 2012-01-06 21:20:45

+0

可能,我對mysql不太好。 – numerical25 2012-01-06 21:47:32

4
WHERE `Project`.`delivery_deadline` <= 'DATE_SUB(CURDATE(),INTERVAL 7 DAY)' 
GROUP BY `Project`.`id` 
LIMIT 20 

你的最後期限對字符串'DATE_SUB(CURDATE(),INTERVAL 7 DAY)'比較,而

WHERE `Project`.`delivery_deadline` <= DATE_SUB(CURDATE(),INTERVAL 7 DAY) 
GROUP BY `Project`.`id` 
LIMIT 20 

進行比較反對的DATE_SUB()的結果,這可能是你想要的。

+1

請重新格式化代碼。水平滾動是邪惡的:-) – 2012-01-06 20:29:16

+1

...我想它應該是'= ='而不是'<=' – bfavaretto 2012-01-06 20:29:37

+0

@SergioTulentsev我總是儘量保持儘可能多的OQ,即使我不像格式化我自己;-) – 2012-01-06 20:32:14

1

您可以編輯您的查詢,看起來像這樣。這會給你你想要的結果:

WHERE `Project`.`delivery_deadline` >= CURDATE() 
AND `Project`.`delivery_deadline` <= (CURDATE() + 7) 
GROUP BY `Project`.`id` 
LIMIT 20 

是最早結束今天或最遲從今天7天的項目。

+0

我認爲沒有報價。 – numerical25 2012-01-06 21:17:51

+0

你不會在mysql中引用函數。你也不應該引用整數,除非它們被髮布在varchar/text字段中。嘗試按照我的建議編輯查詢,看看它是否有效。 – 2012-01-06 21:20:17