Saltar al contenido

fecha – MySQL SELECT WHERE datetime coincide con el día (y no necesariamente la hora)

octubre 19, 2021
apple touch icon@2

NUNCA JAMÁS usa un selector como DATE(datecolumns) = '2012-12-24' – es un asesino del rendimiento:

  • calculará DATE() para todas las filas, incluidas las que no coinciden
  • hará que sea imposible utilizar 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 de índices 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 final del día 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, evitar un selector en una expresión calculada, por supuesto sigue en pie.

close