我試圖根據當前日期查找記錄。我試圖做的其中一個查詢是找到當前日期7天內的任何記錄。這是我的查找日期早於7日後的日期的記錄。使用日期時間格式
WHERE `Project`.`delivery_deadline` <= 'DATE_SUB(CURDATE(),INTERVAL 7 DAY)'
GROUP BY `Project`.`id`
LIMIT 20
這當然不工作。我究竟做錯了什麼。 delivery_deadline是日期時間格式不是日期格式
我試圖根據當前日期查找記錄。我試圖做的其中一個查詢是找到當前日期7天內的任何記錄。這是我的查找日期早於7日後的日期的記錄。使用日期時間格式
WHERE `Project`.`delivery_deadline` <= 'DATE_SUB(CURDATE(),INTERVAL 7 DAY)'
GROUP BY `Project`.`id`
LIMIT 20
這當然不工作。我究竟做錯了什麼。 delivery_deadline是日期時間格式不是日期格式
你不應該寫:
WHERE `Project`.`delivery_deadline` >= 'DATE_SUB(CURDATE(),INTERVAL 7 DAY)'
編輯
正確的解決方法是:
WHERE Project.delivery_deadline between now() and date_add(now() ,interval 7 day)
你是正確的。現在我已經這樣做了,但它仍然沒有完全按照我希望的方式去做。如果你看看上面的評論。我正在嘗試獲取所有記錄,其交付截止日期是從現在開始的7天之前的任何時間。我創建了一個超出本月13日的日期,但它仍然顯示。 delivery_deadline也是日期時間格式,所以我不知道這與它有什麼關係。 – numerical25 2012-01-06 20:56:48
現在()和date_add(now(),間隔7天)之間使用WHERE Project.delivery_deadline是不是更好? – Gianluca 2012-01-06 21:20:45
可能,我對mysql不太好。 – numerical25 2012-01-06 21:47:32
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()
的結果,這可能是你想要的。
請重新格式化代碼。水平滾動是邪惡的:-) – 2012-01-06 20:29:16
...我想它應該是'= ='而不是'<=' – bfavaretto 2012-01-06 20:29:37
@SergioTulentsev我總是儘量保持儘可能多的OQ,即使我不像格式化我自己;-) – 2012-01-06 20:32:14
您可以編輯您的查詢,看起來像這樣。這會給你你想要的結果:
WHERE `Project`.`delivery_deadline` >= CURDATE()
AND `Project`.`delivery_deadline` <= (CURDATE() + 7)
GROUP BY `Project`.`id`
LIMIT 20
是最早結束今天或最遲從今天7天的項目。
我認爲沒有報價。 – numerical25 2012-01-06 21:17:51
你不會在mysql中引用函數。你也不應該引用整數,除非它們被髮布在varchar/text字段中。嘗試按照我的建議編輯查詢,看看它是否有效。 – 2012-01-06 21:20:17
世界上的什麼讓你把DATE_SUB(CURDATE(),INTERVAL 7 DAY)放在單引號中? – SergeS 2012-01-06 20:27:48
你爲什麼要在這裏做'GROUP BY'? – 2012-01-06 20:27:53
由於DATE_SUB是一個函數,而不是一個值,你應該刪除引號。我不知道這是否足以解決您的問題,但您也應該在表格結構中包含信息。我們不知道你的日期欄是什麼類型。約會時間? – 2012-01-06 20:29:10