簡體   English   中英

MySQL從7天前精確選擇行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM