2012-04-10 4 views
0

Ich bin eine seltsame Rückkehr bekommen, wenn der diese Abfrage ausführt:Vergleichen Sie stammt aus verschiedenen Jahren in mySQL

SELECT * FROM rrp 
WHERE end > "2012-12-31" 

nichts zurückgegeben, obwohl ich auf dieser Tabelle eine Zeile haben, die „Ende“ -Spalte größer als "2012-12-31" ist :

rrp

id_r | id__b | start | end  | quantity 
27   29  2012-01-01 2012-05-05  1 
31   29  2012-11-01 2013-01-01  1 

EDIT: start und end sind date Felder

EDIT: Ich falsche Datenbank für meine Tests => falsches Ergebnis die Ausgabe verwendet wurde von Zend_Date kommen, wenn Sie einen Tag zu einem Datum hinzu:

$ start = „2012-12-31“ ; $ nStart = new Zend_Date ($ start, "JJJJ-MM-dd"); $ end = neues Zend_Date ($ nStart); $ end-> addDay (1);

Wenn ich $ Ende hallte: echo $end->get("YYYY-MM-dd");

es gibt 2013-12-31

+4

Ist "Ende" eigentlich ein Datumsfeld? Ich weiß, dass MySQL manchmal seltsame Dinge tut, wenn es Daten konvertiert. –

+0

ja sie sind, Entschuldigung für die Ungenauigkeit –

+2

Da ist etwas, was du uns nicht mitteilst - denn mit allem, was du in deiner Frage geschrieben hast * sollte * funktionieren - [siehe dieses sehr einfache Beispiel] (http://www.sqlize.com/s4kzK77qFK) Setup das gleiche wie Ihre Frage (nur mit der Endspalte) – ManseUK

Antwort

2

Wahrscheinlich ein Problem mit, wie die Daten sind

formatiert

Diese
http://dev.mysql.com/doc/refman/5.0/en/using-date.html

+0

As ' "2012-12-31" 'und' 2013-01-01' sind auf die gleiche Weise formatiert und '2013-01-01' ist als Datumsfeld konfiguriert. Ich verstehe diese Ausgabe nicht. –

+0

Wenn Sie solche Datumsfelder verwenden manchmal werden am Ende Nullen angeheftet, die das System zwar zuweist, aber nicht anzeigt, was dazu führt, dass Operatoren in manchen Fällen bis zu einem Tag ausbleiben, Beispiel: '20041003 23:00:00' ist größer als '20041003', weil "20041003" ist entspricht "20041003 00:00:00". –

2

helfen sollte Wenn end a Spalte DATE, sollte es wie erwartet funktionieren:

SELECT 
    STR_TO_DATE('2013-01-01', '%Y-%m-%d') < "2012-12-31", 
    STR_TO_DATE('2012-05-05', '%Y-%m-%d') < "2012-12-31" 

... gibt 0, 1 in meiner Box zurück.

Die einzig mögliche Fehler, den ich denken kann, ist, dass Format Ihres Systems Standarddatum ist nicht %Y-%m-%d:

SELECT @@DATE_FORMAT 

In diesem Fall müssen Sie ein Format jedes Mal angeben:

SELECT * 
FROM rrp 
WHERE end > STR_TO_DATE('2012-12-31', '%Y-%m-%d') 
Verwandte Themen