Как я могу выбрать записи для данного дня недели с помощью SQL?

StackOverflow https://stackoverflow.com/questions/602245

  •  03-07-2019
  •  | 
  •  

Вопрос

Я мог бы использовать этот запрос для выбора всех заказов с датой в понедельник:

SELECT * from orders WHERE strftime("%w", date)="1";

Но, насколько я знаю, это не может быть ускорено с помощью индекса, как для каждой строки strftime должно быть рассчитано.

Я мог бы добавить дополнительное поле с сохраненным днем недели, но я хочу избежать этого.Есть ли решение, которое использует индекс, или я ошибаюсь, и этот запрос действительно работает нормально?(Это означает, что ему не нужно перебирать каждую строку, чтобы вычислить результат.)

Это было полезно?

Решение

Если ты хочешь ВСЕ По понедельникам вам потребуется полевое или последовательное сканирование.Что вы могли бы сделать, так это рассчитать фактические даты, например, для всех понедельников в течение года.Состояние WHERE date IN ('2009-03-02', '2009-02-23', ...) использовал бы индекс

Другие советы

Или в качестве альтернативы предложению vartec создайте таблицу календаря, состоящую только из даты и названия дня для каждого дня в году (оба проиндексированы), а затем выполните свой запрос, выполнив ОБЪЕДИНЕНИЕ с этой таблицей.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top