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