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

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 по 14.05
втрати противника
орієнтовно склали:
969370 ( +1240 ) особового складу
10804 ( +2 ) танків
22501 ( +14 ) бойових бронемашин
27827 ( +47 ) артилерійських систем
1382 ( +1 ) РСЗВ
1165 ( +3 ) засоби ППО
372 ( +0 ) літаків
335 ( +0 ) гелікоптерів
48382 ( +126 ) автомобільної техніки
28 ( +0 ) кораблі / катери
3197 ( +0 ) крилаті ракети
35860 ( +82 ) БПЛА
3884 ( +0 ) спец. техніки
4 ( +0 ) установок ОТРК/ТРК
1 ( +0 ) підводні човни