2013-03-25 225 views
9

如果我有這樣一個日期:MySQL的選擇昨天的日期

'2013-03-25' 

我想寫一個MySQL查詢與WHERE是「昨天」,我該怎麼辦呢?

+0

[MySQL選擇昨天的日期]可能的重複(http://stackoverflow.com/questions/7146828/mysql-selecting-yesterdays-date) – derobert 2016-07-01 16:49:37

回答

16

一種簡單的方式來獲得昨天的日期是使用subdate()功能:

subdate(currentDate, 1) 
26

這應做到:

WHERE `date` = CURDATE() - INTERVAL 1 DAY 
+0

如果它比當前時間早一分鐘怎麼辦? – SLaks 2013-03-25 19:10:57

+0

我不確定你在做什麼。你能澄清嗎? – 2013-03-25 19:12:47

+1

應該是'curdate()',而不是'now()'? AFAIK,你的代碼將只適用於如果時間匹配恰好爲 – SLaks 2013-03-25 19:18:50

1

我總是不得不引用一段代碼片段來重新包裹我的頭。

習慣上在數據庫中存儲UTC的日期時間。但通常,在生成報告時,需要針對特定​​時區調整時間。

下面是我用它來說明如何選擇昨天,調整爲太平洋時間段:

SET @date_start = DATE_SUB((CURDATE() - INTERVAL 1 DAY), INTERVAL 8 HOUR); 
SET @date_end = DATE_SUB(CURDATE(), INTERVAL 8 HOUR); 

SELECT 
    projects.token, 
    projects.created_at as 'UTC created_at', 
    DATE_SUB(projects.created_at, INTERVAL 8 HOUR) as 'Pacific created_at' 
FROM 
    projects 
WHERE 
    projects.created_at BETWEEN @date_start AND @date_end; 

注:我設置的變量在段,這樣更容易看。當我編寫最終查詢時,我通常不使用這些變量。