Как я могу выбрать записи для данного дня недели с помощью SQL?
-
03-07-2019 - |
Вопрос
Я мог бы использовать этот запрос для выбора всех заказов с датой в понедельник:
SELECT * from orders WHERE strftime("%w", date)="1";
Но, насколько я знаю, это не может быть ускорено с помощью индекса, как для каждой строки strftime
должно быть рассчитано.
Я мог бы добавить дополнительное поле с сохраненным днем недели, но я хочу избежать этого.Есть ли решение, которое использует индекс, или я ошибаюсь, и этот запрос действительно работает нормально?(Это означает, что ему не нужно перебирать каждую строку, чтобы вычислить результат.)
Решение
Если ты хочешь ВСЕ По понедельникам вам потребуется полевое или последовательное сканирование.Что вы могли бы сделать, так это рассчитать фактические даты, например, для всех понедельников в течение года.Состояние WHERE date IN ('2009-03-02', '2009-02-23', ...)
использовал бы индекс
Другие советы
Или в качестве альтернативы предложению vartec создайте таблицу календаря, состоящую только из даты и названия дня для каждого дня в году (оба проиндексированы), а затем выполните свой запрос, выполнив ОБЪЕДИНЕНИЕ с этой таблицей.