2013-03-25 28 views
9

Wenn ich ein Datum wie dieses:MySQL wählen gestrige Datum

'2013-03-25' 

Und ich möchte eine MySQL-Abfrage mit WHERE ist „gestern“ schreiben, wie ich es tun?

+0

Mögliches Duplikat von [MySQL das Datum von gestern auswählen] (http://stackoverflow.com/questions/7146828/mysql-selecting-yesterdays-date) – derobert

Antwort

16

Ein einfacher Weg, Datum zu erhalten, gestern ist subdate() Funktion zu verwenden:

subdate(currentDate, 1) 
26

Dies sollte es tun:

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

Was ist, wenn es eine Minute früher als die aktuelle Zeit ist? – SLaks

+0

Ich bin mir nicht sicher, worauf Sie hinauswollen. Kannst du bitte klären? –

+1

Sollte das 'curdate()' sein, nicht 'now()'? AFAIK, Ihr Code wird nur funktionieren, wenn die Uhrzeit genau übereinstimmt – SLaks

1

Ich muss mich immer auf ein Code-Snippet beziehen, um meinen Kopf wieder darum zu wickeln.

Es ist üblich, Datumsangaben in UTC in der Datenbank zu speichern. Bei der Erstellung von Berichten müssen die Zeiten jedoch normalerweise für eine bestimmte Zeitzone angepasst werden.

Hier ist das Snippet ich gestern zu zeigen, die Auswahl, für Pacific Time eingestellt:

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; 

Hinweis: ich die Variablen im Code-Schnipsel so eingestellt, dass es einfacher ist, zu betrachten. Wenn ich die letzte Abfrage schreibe, verwende ich normalerweise nicht die Variablen.