type timestampdiff funciones fecha espaƱol date_format convert mysql date date-format

timestampdiff - mysql date type



ComparaciĆ³n de fecha mysql con date_format (3)

Busqué en Google e intenté varias maneras de comparar la fecha pero desafortunadamente no obtuve el resultado como se esperaba. Tengo el estado actual de registros como los siguientes:

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.


Fundamentalmente, su formato no es ordenable: está comparando cadenas , y la cadena "28-10-2012" es mayor que "02-11-2012".

En su lugar, debe comparar fechas como fechas y luego convertirlas solo en 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 siempre debe estar en formato año-mes-valor, según la documentación ).

Tenga en cuenta que si la starttime es un campo DATETIME , es posible que desee considerar cambiar la consulta para evitar la conversión repetida. (El optimizador puede ser lo suficientemente inteligente como para evitarlo, pero vale la pena comprobarlo).

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 utilizar yMd en general, ya que es el estándar ISO-8601, etc. Sin embargo, el código anterior hace lo que pidió en la pregunta).


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


Utilice 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á!