[英]MySQL select rows from exactly 7 days ago
我完全被這個問題困住了,幾個小時都在努力,但沒有成功,希望有人可以提供幫助。 嘗試構建一個每天運行的cron腳本,返回比當前日期早7天的行。
問題是,我的查詢沒有返回任何內容。 沒有錯誤消息,沒有(我知道過去7天數據庫中有條目 - 我們每天大約有7000個條目,所以它們就在那里!)我已經嘗試了SELECT *並在編輯日期回應成功,除了我的SQL腳本,一切正常。
我正在引用的列(edit_date)是使用Ymd hms格式化的'datetime'類型。 此列始終在創建和編輯時分配了日期時間值。
function get_ad_sql($table){
$sql = "SELECT
*
FROM
".$table."
WHERE
edit_date = DATE_SUB(NOW(), INTERVAL 7 DAY)
";
return $sql;
}
並調用該函數並“嘗試”回顯primary_key:
$sqlAng = get_ad_sql('angebote');
$result = mysql_query($sqlAng);
while($row = mysql_fetch_array($result)){
echo $row['primary_key'];
}
我已經嘗試了DATE_SUB(NOW(),INTERVAL 7 DAY)的每個變體,包括CURDATE(),DATE_FORMAT(edit_date,'%m /%d /%Y'),我可以在這里和網上找到,但是不能'得到任何工作。 希望可以有人幫幫我!
獲得相同的日期時間條目非常罕見,日期和時間最多可達到秒。 因此,為了獲得適當的結果,我們需要忽略時間部分,並使用CURDATE()
函數處理日期部分。
您可以忽略時間部分,並使用以下日期與日期進行比較:
function get_ad_sql($table){
$sql = "SELECT
*
FROM
".$table."
WHERE
DATE(edit_date) = DATE_SUB(CURDATE(), INTERVAL 7 DAY)
";
return $sql;
}
NOW()返回DATETIME值,你應該使用DATE函數來獲取沒有時間的日期,例如 -
SELECT * FROM table WHERE edit_date = DATE_SUB(DATE(NOW()), INTERVAL 7 DAY);
如果edit_date
字段的類型是DATETIME,那么該字段也應該由DATE()函數包裝 -
SELECT * FROM table WHERE DATE(edit_date) = DATE_SUB(DATE(NOW()), INTERVAL 7 DAY);
你的腳本工作......我很懷疑你有什么事情正好為 7天前(到秒)。
也許你想要的東西WHERE edit_date>DATE_SUB(NOW, INTERVAL 7 DAY) AND edit_date<DATE_SUB(NOW, INTERVAL 6 DAY)
?
或者,如果您只想比較日期(而不是時間)部分,請比較DATE()
的輸出。
SELECT SUBDATE(CURDATE(), 7)
嘗試這個。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.