Слава Україні!

MySQL: запросы DATE BETWEEN

Выборка значений из базы данных за определенный период.
14-го серпня 2013, 8:08
Часто бывает необходимо выбрать значения из базы данных за определенный период. Чтобы не забыть, сделал вот такую заметку с подборкой запросов `SELECT ... DATE BETWEEN`. Поле `created_at` - тип `DATETIME` **КОРРЕКТНЫЕ ЗАПРОСЫ** *Запрос 1:* - Индексы для `created_at` поля не используются. - Условие `BETWEEN '2008-08-14' AND '2008-08-23'` преобразуется в `BETWEEN '2008-08-14 00:00:00' AND '2008-08-23 00:00:00'`.

    SELECT * FROM news WHERE DATE(created_at) BETWEEN '2008-08-14' AND '2008-08-23';
*Запрос 2:* - Оператор `BETWEEN` не используем, но тоже не самый лучший вариант, - Индексы для `created_at` поля не используются.

    SELECT * FROM news WHERE DATE(created_at) >= '2008-08-14' AND DATE(created_at) <= '2008-08-23';
*Запрос 3:* - Строки '2008-08-14 00:00:00' и '2008-08-23 23:59:59' не приведены к типу данных `DATE`

    SELECT * FROM news WHERE created_at BETWEEN '2008-08-14 00:00:00' AND '2008-08-23 23:59:59';
*Запрос 4:* Самый лучший вариант, - привели к типу `DATETIME`, - индексы будут использоваться

    SELECT * FROM news
    WHERE created_at BETWEEN
        STR_TO_DATE('2008-08-14 00:00:00', '%Y-%m-%d %H:%i:%s') AND
        STR_TO_DATE('2008-08-23 23:59:59', '%Y-%m-%d %H:%i:%s');

Важлива інформація

Міністерство оборони
України
з 24.02 по 15.04
втрати противника
орієнтовно склали:
1313970 ( +1010 ) особового складу
11864 ( +1 ) танків
24390 ( +1 ) бойових бронемашин
40003 ( +50 ) артилерійських систем
1736 ( +4 ) РСЗВ
1346 ( +0 ) засоби ППО
435 ( +0 ) літаків
350 ( +0 ) гелікоптерів
89553 ( +253 ) автомобільної техніки
33 ( +0 ) кораблі / катери
4517 ( +0 ) крилаті ракети
239241 ( +1388 ) БПЛА
4125 ( +2 ) спец. техніки
4 ( +0 ) установок ОТРК/ТРК
2 ( +0 ) підводні човни