MySQL SELECCIONA DONDE la fecha coincide con el día (y no necesariamente el tiempo)

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 

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.

... WHERE date_column >='2012-12-25' AND date_column <'2012-12-26' puede funcionar mejor (si tiene un índice en date_column) que DATE .

Puedes usar % :

 SELECT * FROM datetable WHERE datecol LIKE '2012-12-25%'