У меня есть таблица, содержащая столбец datetime. Я хочу вернуть все записи за определенный день независимо от времени. Или, другими словами, если моя таблица содержит только следующие 4 записи, тогда будут возвращены только 2-я и 3-я, если я ограничусь 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
Ответы:
НИКОГДА не используйте селектор вроде
DATE(datecolumns) = '2012-12-24'
- это убийца производительности:DATE()
для всех строк, включая те, которые не соответствуютГораздо быстрее использовать
так как это позволит использовать индекс без расчета.
РЕДАКТИРОВАТЬ
Как указывает Used_By_Already, за время, прошедшее с момента первоначального ответа в 2012 году, появились версии MySQL, в которых использование «23:59:59» в качестве конца дня уже небезопасно. Обновленная версия должна читать
Суть ответа, то есть отказ от селектора в вычисляемом выражении, конечно же, остается в силе.
источник
WHERE col >= '2012-12-25' AND col < '2012-12-25' + INTERVAL 1 DAY
. Это позволяет избежать 0 раз и работаетDATE
,DATETIME
,DATETIME(6)
и т.д. И дело с високосного дня и т.д.... WHERE date_column >='2012-12-25' AND date_column <'2012-12-26'
потенциально может работать лучше (если у вас есть индекс для date_column), чемDATE
.источник
BETWEEN
решение ... кто-нибудь пометил?BETWEEN
это просто способ писатьfield >= value1 and fied<= value2
.Вы можете использовать
%
:источник