2009-06-29 21 views
30

ich zwei Tage, mit der Zeit vergleichen wollen, ich alle Ergebnisse from tbl where date1 > date2 wollenMysql Vergleichen Sie zwei Datetime-Felder

Select * From temp where mydate > '2009-06-29 04:00:44'; 

aber es ist nur Daten nicht an der Zeit zu vergleichen. es gibt mir das Ergebnis des heutigen Tages

'2009-06-29 11:08:57' 
'2009-06-29 11:14:35' 
'2009-06-29 11:12:38' 
'2009-06-29 11:37:48' 
'2009-06-29 11:52:17' 
'2009-06-29 12:12:50' 
'2009-06-29 12:13:38' 
'2009-06-29 12:19:24' 
'2009-06-29 12:27:25' 
'2009-06-29 12:28:49' 
'2009-06-29 12:35:54' 
'2009-06-29 12:36:54' 
'2009-06-29 12:49:57' 
'2009-06-29 12:58:04' 
'2009-06-29 04:13:20' 
'2009-06-29 04:56:19' 
'2009-06-29 05:00:23' 
'2009-06-29 05:04:26' 
'2009-06-29 05:08:17' 
'2009-06-29 05:26:57' 
'2009-06-29 05:29:06' 
'2009-06-29 05:32:11' 
'2009-06-29 05:52:07' 

Vielen Dank im Voraus!

+13

Es gibt kein Ergebnis, das ist weniger als "2009-06-29 04:00:44"; so scheint es, dass Ihr Code funktioniert, oder fehlt mir etwas? –

+0

Ich mag diese Daten als Ausgang nicht vor, dass ‚2009-06-29 04.56.19‘ ‚2009-06-29 05.00.23‘ ‚2009-06-29 05.04.26‘ '2009-06-29 05:08:17' '2009-06-29 05:26:57' '2009-06-29 05:29:06' '2009-06-29 05:32:11 ' ' 2009-06-29 05:52:07 ' –

+1

Ähm ... Sie haben keine sichtbaren davor. Es scheint, du schlägst vor '2009-06-29 11:08:57' kommt vor '2009-06-29 04:00:44'. 4 Uhr kommt vor 11 Uhr, und deshalb sehen Sie, dass 11 Uhr morgens mehr als 4 Uhr morgens ist. Noch einmal, vermisse ich etwas? –

Antwort

53

Die Abfrage, die Sie als ein Beispiel zeigen wollen, ist:

SELECT * FROM temp WHERE mydate > '2009-06-29 16:00:44'; 

04:00:00 ist 04.00, so dass alle Ergebnisse, die Sie nach kommen Anzeigen sind das, was richtig ist .

Wenn Sie nach 16 Uhr alles anzeigen möchten, müssen Sie in Ihrer Abfrage die richtige (24-Stunden-) Notation verwenden.

Um die Dinge etwas klarer, versuchen Sie dies:

SELECT mydate, DATE_FORMAT(mydate, '%r') FROM temp; 

, dass Sie das Datum an, und seine 12-Stunden Zeit.

3

Ihre Abfrage offenbar offenbar alle richtigen Daten, auch unter Berücksichtigung der Zeit.

Wenn Sie mit den Ergebnissen immer noch nicht zufrieden sind, geben Sie DATEDIFF eine Chance und suchen Sie nach negativen/positiven Ergebnissen zwischen den beiden Daten.

Stellen Sie sicher, dass Ihre mydate Spalte ein datetime Typ ist.

3

Möchten Sie es bestellen?

Select * From temp where mydate > '2009-06-29 04:00:44' ORDER BY mydate; 
+0

nein ich will nur datetime nach '2009-06-29 04:00:44' –

+0

Das ist was du hast. – alexn

+0

nein, ich bekomme alle Ergebnisse für das heutige Datum nicht nach der Datetime, die ich für ex angegeben habe: - Die Zeit, die ich angegeben habe, ist 4PM und ich bekomme 11AM Datensätze in diesem. –

9

Sie können das folgende SQL sowohl Datum und Uhrzeit vergleichen -

Select * From temp where mydate > STR_TO_DATE('2009-06-29 04:00:44', '%Y-%m-%d %H:%i:%s'); 

angebaute mysql ausgegeben, wenn ich gleiche SQL auf gleiche Art von Tabellen- und Feld verwendet, die Sie im Problem-

erwähnt

enter image description here

Es sollte perfekt funktionieren.

+0

Brilliant. Mysql vergleicht Zeichenfolge statt Daten! Ich werde das von jetzt an beachten. Große Antwort, upvoted! –

+0

STR_TO_DATE, danke !!! – mircea