MySQL: Hinzufügen eines Tages zum Datum / Uhrzeit-Feld in der Abfrage

76

In meinem Tisch habe ich ein Feld mit dem Namen eventdatein datetimeFormat wie 2010-05-11 00:00:00.

Wie mache ich eine Abfrage, damit sie einen Tag zum eventdateBeispiel hinzufügt , wenn heute ist 2010-05-11, möchte ich in whereKlausel anzeigen, um alle Datensätze mit dem Datum von morgen zurückzugeben.

Aktualisieren:

Ich habe es versucht:

select * from fab_scheduler where custid = 1334666058 and DATE_ADD(eventdate, INTERVAL 1 DAY)

Aber leider gibt es den gleichen Datensatz zurück, auch wenn ich ein Intervall größer als 1 hinzufüge.

Ergebnis:

2010-05-12 00:00:00

Aber ich möchte nur Datensätze mit dem Datum von morgen auswählen.

Ivar
quelle

Antworten:

140

Sie können die DATE_ADD()Funktion verwenden:

... WHERE DATE(DATE_ADD(eventdate, INTERVAL -1 DAY)) = CURRENT_DATE

Es kann auch in der SELECTAnweisung verwendet werden:

SELECT DATE_ADD('2010-05-11', INTERVAL 1 DAY) AS Tomorrow;
+------------+
| Tomorrow   |
+------------+
| 2010-05-12 |
+------------+
1 row in set (0.00 sec)
Daniel Vassallo
quelle
1
@phpBOY: Ich denke, Sie haben den Teil `= CURRENT_DATE` verpasst.
Daniel Vassallo
Ich habe es versucht, select * from fab_scheduler where custid = 1334666058 and DATE(DATE_ADD(eventdate, INTERVAL 1 DAY)) = CURRENT_DATE aber jetzt gibt es eine leere Ergebnismenge zurück :(
1
Ich würde CURDATE () persönlich verwenden
David Yell
@phpBOY: Du hast recht. Sie müssen verwenden -1, um mit übereinzustimmen CURRENT_DATE. Versuchen Sie es mit der aktualisierten Abfrage.
Daniel Vassallo
@ Daniel Vassallo: Könnten Sie bitte die Abfrage erstellen, ich bekomme einen leeren Datensatz. Danke
7

Probieren Sie es aus, denn so würde ich es machen :)

SELECT * 
FROM fab_scheduler
WHERE custid = '123456'
AND CURDATE() = DATE(DATE_ADD(eventdate, INTERVAL 1 DAY))
David Yell
quelle
1
Ich denke nicht, dass das funktionieren kann. eventdatewird niemals gleich sein eventdate + 1 day. Ich denke, Sie wollten CURDATE()dort verwenden.
Daniel Vassallo
3

Es ist möglich, MySQL-spezifischen Syntaxzucker zu verwenden:

SELECT ... date_field + INTERVAL 1 DAY

Sieht viel hübscher aus als die Funktion DATE_ADD

Vadim
quelle
1

Wenn Sie NOW () verwenden können, ist dies die einfachste Form:

SELECT * FROM `fab_scheduler` WHERE eventdate>=(NOW() - INTERVAL 1 DAY)) AND eventdate<NOW() ORDER BY eventdate DESC;

Mit MySQL 5.6+ Abfrage sollte abowe tun. Abhängig vom SQL Server müssen Sie möglicherweise CURRDATE()anstelle von NOW()- verwenden. Dies ist ein Alias ​​für DATE(NOW())und gibt nur den Datumsteil des datetimeDatentyps zurück.

vzr
quelle
0

Wie wäre es damit: 

select * from fab_scheduler where custid = 1334666058 and eventdate = eventdate + INTERVAL 1 DAY
ErikS
quelle
0

Sie können dies versuchen:

SELECT DATE(DATE_ADD(m_inv_reqdate, INTERVAL + 1 DAY)) FROM  tr08_investment
Amit Prajapati
quelle
-3
$date = strtotime(date("Y-m-d", strtotime($date)) . " +1 day");

Oder einfacher:

date("Y-m-d H:i:s", time()+((60*60)*24));
Vonder
quelle
Sie haben nicht mit der Sommerzeit gerechnet. mktime wäre besser.
Vili