wake-up-neo.com

mySQL-Datumsvergleich mit Date_format

Ich googelte und versuchte verschiedene Möglichkeiten, das Datum zu vergleichen, bekam aber das Ergebnis leider nicht wie erwartet. Ich habe den aktuellen Status der Datensätze wie folgt:

        mysql> select date_format(date(starttime),'%d-%m-%Y') from data;

              +-----------------------------------------+
              | date_format(date(starttime),'%d-%m-%Y') |
              +-----------------------------------------+
              | 28-10-2012                              |
              | 02-11-2012                              |
              | 02-11-2012                              |
              | 02-11-2012                              |
              | 03-11-2012                              |
              | 03-11-2012                              |
              | 07-11-2012                              |
              | 07-11-2012                              |

Ich möchte das Datum vergleichen und mache es deshalb so:

        mysql> select date_format(date(starttime),'%d-%m-%Y') from data where date_format(date(starttime),'%d-%m-%y') >= '02-11-2012';
               +-----------------------------------------+
               | date_format(date(starttime),'%d-%m-%Y') |
               +-----------------------------------------+
               | 28-10-2012                              |
               | 02-11-2012                              |
               | 02-11-2012                              |
               | 02-11-2012                              |
               | 03-11-2012                              |
               | 03-11-2012                              |
               | 07-11-2012                              |
               | 07-11-2012                              |

Ich glaube, dass das Ergebnis nicht '28 -10-2012 'enthalten sollte. Irgendein Vorschlag? Danke im Voraus.

20

Ihr Format ist grundsätzlich nicht sortierbar. Sie vergleichen Zeichenfolgen und die Zeichenfolge "28-10-2012" ist größer als "02-11-2012".

Stattdessen sollten Sie Datumsangaben als Datumsangaben vergleichen und diese dann nur für die Ausgabe in Ihr Zielformat konvertieren.

Versuche dies:

select date_format(date(starttime),'%d-%m-%Y') from data
where date(starttime) >= date '2012-11-02';

(Die Eingabe muss immer in Form eines Jahres-Monat-Werts erfolgen, gemäß der Dokumentation

Wenn starttime ein DATETIME-Feld ist, sollten Sie die Abfrage möglicherweise ändern, um eine wiederholte Konvertierung zu vermeiden. (Das Optimierungsprogramm ist möglicherweise intelligent genug, um es zu vermeiden, aber es lohnt sich, es zu überprüfen.)

select date_format(date(starttime),'%d-%m-%Y') from data
where starttime >= '2012-11-02 00:00:00';

(Beachten Sie, dass es ungewöhnlich ist, ein Datum als d-m-Y zu formatieren, um mit zu beginnen - es wäre besser, y-M-d im Allgemeinen zu verwenden, da dies der ISO-8601-Standard ist. Der obige Code entspricht jedoch dem, was Sie in der Frage verlangt haben.)

38
Jon Skeet

Verwenden Sie 2012-11-02 anstelle von 02-11-2012 und Sie brauchen date_format () nicht mehr

1
wormhit

Verwenden Sie die folgende Methode:

public function dateDiff ($date1, $date2) {
/* Return the number of days between the two dates: */
  return round(abs(strtotime($date1)-strtotime($date2))/86400);
}  
/* end function dateDiff */

Es wird helfen!

0
Gaurav Gupta