Como posso selecionar entradas para um determinado dia da semana usando SQL?
-
03-07-2019 - |
Pergunta
Eu poderia usar essa consulta para selecionar todas as encomendas com uma data em uma segunda-feira:
SELECT * from orders WHERE strftime("%w", date)="1";
Mas, tanto quanto eu sei, isso não pode ser a velocidade usando um índice, como para cada strftime
linha tem de ser calculado.
Eu poderia adicionar um campo adicional com o dia da semana armazenados, mas eu quero evitar isso. Existe uma solução que faz uso de um índice ou estou errado e esta consulta realmente funciona bem? (Isso significa que ele não tem que passar por cada linha para calcular o resultado.)
Solução
Se você quiser todas Segunda-feira que nunca, você precisa de um campo ou varredura seqüencial. O que você poderia fazer, é datas reais calcular, por exemplo, para todas as segundas-feiras dentro de um ano. O WHERE date IN ('2009-03-02', '2009-02-23', ...)
condição seria usar o índice
Outras dicas
Ou, como alternativa à sugestão de vartec, construir uma tabela de calendário, consistindo apenas em uma data e um nome de dia para cada dia do ano (ambos indexados) e, em seguida, realizar sua consulta, fazendo um JOIN contra esta tabela.