comparación de fecha mysql con date_format

Busqué en Google e intenté varias formas de comparar la fecha, pero desafortunadamente no obtuve el resultado esperado. Tengo el estado actual de registros como el siguiente:

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 | 

Me gustaría comparar la fecha y, por lo tanto, hacer esto:

  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 | 

Creo que el resultado no debe incluir ’28 -10-2012 ‘. ¿Cualquier sugerencia? Gracias por adelantado.

Para empezar, su formato no es básicamente clasificable: está comparando cadenas y la cadena “28-10-2012” es mayor que “02-11-2012”.

En su lugar, debe comparar las fechas como fechas y luego solo convertirlas a su formato de destino para la salida.

Prueba esto:

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

(La entrada debe estar siempre en forma de valor de año-mes, según la documentación ).

Tenga en cuenta que si el tiempo de starttime es un campo DATETIME , le DATETIME que cambie la consulta para evitar conversiones repetidas. (El optimizador puede ser lo suficientemente inteligente como para evitarlo, pero vale la pena verificarlo).

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

(Tenga en cuenta que es inusual formatear una fecha como dmY para comenzar, sería mejor usar yMd en general, que es el estándar ISO-8601, etc. Sin embargo, el código anterior hace lo que usted solicitó en la pregunta).

Use 2012-11-02 en lugar de 02-11-2012 y ya no necesitará date_format ()

Utiliza el siguiente método:

 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 */ 

¡Ayudará!