Как я могу выбрать записи для данного дня недели, используя SQL? - PullRequest
0 голосов
/ 02 марта 2009

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

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

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

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

Ответы [ 2 ]

1 голос
/ 02 марта 2009

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

1 голос
/ 02 марта 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...