obtener - restar fechas mysql en dias
MySQL SELECCIONA DONDE la fecha coincide con el día(y no necesariamente el tiempo) (3)
Tengo una tabla que contiene una columna de fecha y hora. Deseo devolver todos los registros de un día determinado independientemente de la hora. O en otras palabras, si mi tabla solo contiene los 4 registros siguientes, solo se devolverán el 2º y 3º si me limito a 2012-12-25.
2012-12-24 00:00:00
2012-12-25 00:00:00
2012-12-25 06:00:00
2012-12-26 05:00:00
Puedes usar %
:
SELECT * FROM datetable WHERE datecol LIKE ''2012-12-25%''
... WHERE date_column >=''2012-12-25'' AND date_column <''2012-12-26''
puede funcionar mejor (si tiene un índice en date_column) que DATE
.
NUNCA VAYA NUNCA usando un selector como DATE(datecolumns) = ''2012-12-24''
- es un asesino de rendimiento:
- calculará
DATE()
para todas las filas, incluidas aquellas que no coinciden - hará que sea imposible usar un índice para la consulta
Es mucho más rápido de usar
SELECT * FROM tablename
WHERE columname BETWEEN ''2012-12-25 00:00:00'' AND ''2012-12-25 23:59:59''
ya que esto permitirá el uso del índice sin cálculo.
EDITAR
Como señaló Used_By_Already, en el tiempo transcurrido desde la respuesta inicial en 2012, surgieron versiones de MySQL, donde el uso de ''23: 59: 59 ''como fin de semana ya no es seguro. Una versión actualizada debería leer
SELECT * FROM tablename
WHERE columname >=''2012-12-25 00:00:00''
AND columname <''2012-12-26 00:00:00''
La esencia de la respuesta, es decir, la evitación de un selector en una expresión calculada, por supuesto, sigue en pie.