2013-07-16 6 views
6

Ich habe zwei Spalten in einer Tabelleüberprüfen, ob ein Datum nächstes oder Vergangenheit in MysQL

  • event_date (Wert wird 2013.09.22)
  • event_time (Wert 7.11)

Jetzt möchte ich eine Abfrage schreiben, die sollte kehrt Reihe, die Uhrzeit und das Datum in Zukunft oder Vergangenheit hat

ich so etwas wie dieses

schrieb
select * from events e 
where concat(e.event_date,' ',e.event_time) <= date_format(now(),'%m/%d/%Y %g:%i %a') 

Aber es hat nicht die Arbeit, es ist nur eines dieser Dinge, die Sie nie wissen, was mit ihnen

Vielen Dank im Voraus ist falsch!

+0

Sie haben Daten in Ihrer Datenbank als Text gespeichert ??? –

+0

Speichern Sie Datumsangaben mit den Datentypen DATETIME oder TIMESTAMP. – Strawberry

Antwort

1
select * from events e where TIMESTAMP(e.event_date,e.event_time) <= NOW() 
+0

CURTIME() gibt 08:21:41 zurück :) Sie können nicht erwarten, ein Datum mit ihm zu überprüfen, oder? – imran

4
SELECT * 
    FROM Events 
WHERE event_date < CURRENT_DATE() 
    OR (  event_date = CURRENT_DATE() 
     AND event_time <= CURRENT_TIME() 
     ) 

Dies hat den Vorteil, jeden Index verwenden, der auf event_date existieren könnte.

0

Eine mögliche Lösung, wenn Werte von event_date und event_time gespeichert sind, wie Sie sie zeigte

vergangene Ereignisse wählen

SELECT * 
    FROM events 
WHERE STR_TO_DATE(CONCAT(event_date, ' ', event_time), '%m/%d/%Y %h:%i %p') < NOW() 

Wählen zukünftige Ereignisse

SELECT * 
    FROM events 
WHERE STR_TO_DATE(CONCAT(event_date, ' ', event_time), '%m/%d/%Y %h:%i %p') > NOW() 

Hier ist SQLFiddle Demo

+0

@imran Hat es geholfen? – peterm

Verwandte Themen