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 contuviera los siguientes 4 registros, solo se devolverían el segundo y el tercero si me limito al 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
Respuestas:
NUNCA use un selector como
DATE(datecolumns) = '2012-12-24'
: es un asesino de rendimiento:DATE()
para todas las filas, incluidas aquellas que no coincidenEs mucho más rápido de usar
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, han surgido versiones de MySQL, donde usar '23: 59: 59 'como fin de día ya no es seguro. Una versión actualizada debería leer
La esencia de la respuesta, es decir, la evitación de un selector en una expresión calculada, por supuesto, sigue en pie.
fuente
WHERE col >= '2012-12-25' AND col < '2012-12-25' + INTERVAL 1 DAY
. Evita el tiempo 0 y trabaja paraDATE
,DATETIME
,DATETIME(6)
, etc, y se ocupa de salto días, etc.... WHERE date_column >='2012-12-25' AND date_column <'2012-12-26'
potencialmente puede funcionar mejor (si tiene un índice en date_column) queDATE
.fuente
BETWEEN
solución ... ¿alguien se sorprendió?BETWEEN
Es solo una forma de escribirfield >= value1 and fied<= value2
.Puedes usar
%
:fuente