MySQL SELECT WHERE datetime matches day (and not necessarily time) MySQL SELECT WHERE datetime matches day (and not necessarily time) mysql mysql

MySQL SELECT WHERE datetime matches day (and not necessarily time)


NEVER EVER use a selector like DATE(datecolumns) = '2012-12-24' - it is a performance killer:

  • it will calculate DATE() for all rows, including those, that don't match
  • it will make it impossible to use an index for the query

It is much faster to use

SELECT * FROM tablename WHERE columname BETWEEN '2012-12-25 00:00:00' AND '2012-12-25 23:59:59'

as this will allow index use without calculation.

EDIT

As pointed out by Used_By_Already, in the time since the inital answer in 2012, there have emerged versions of MySQL, where using '23:59:59' as a day end is no longer safe. An updated version should read

SELECT * FROM tablename WHERE columname >='2012-12-25 00:00:00'AND columname <'2012-12-26 00:00:00'

The gist of the answer, i.e. the avoidance of a selector on a calculated expression, of course still stands.


... WHERE date_column >='2012-12-25' AND date_column <'2012-12-26' may potentially work better(if you have an index on date_column) than DATE.


You can use %:

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