Comment puis-je sélectionner des entrées pour un jour de la semaine donné en utilisant SQL?
-
03-07-2019 - |
Question
Je pourrais utiliser cette requête pour sélectionner toutes les commandes avec une date le lundi:
SELECT * from orders WHERE strftime("%w", date)="1";
Mais pour autant que je sache, cela ne peut être accéléré avec un index, car chaque ligne strftime
doit être calculée.
Je pourrais ajouter un champ supplémentaire avec le jour de la semaine stocké, mais je veux l'éviter. Existe-t-il une solution qui utilise un index ou ai-je tort et cette requête fonctionne réellement? (Cela signifie qu'il n'est pas nécessaire de parcourir toutes les lignes pour calculer le résultat.)
La solution
Si vous voulez tous tous les lundis, vous aurez besoin d'une analyse sur le terrain ou séquentielle. Ce que vous pouvez faire, c'est calculer des dates réelles, par exemple, pour tous les lundis de l'année. La condition WHERE date IN ('2009-03-02', '2009-02-23', ...)
utiliserait l'index
Autres conseils
Vous pouvez également créer une table d'agenda composée uniquement d'un nom de date et de jour pour chaque jour de l'année (tous deux indexés) au lieu de la suggestion de vartec, puis effectuer votre requête en effectuant une jointure par rapport à cette table.