Come posso selezionare le voci per un determinato giorno della settimana usando SQL?

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

  •  03-07-2019
  •  | 
  •  

Domanda

Potrei usare questa query per selezionare tutti gli ordini con una data di lunedì:

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

Ma per quanto ne so, questo non può essere accelerato utilizzando un indice, poiché per ogni riga strftime deve essere calcolato.

Potrei aggiungere un campo aggiuntivo con il giorno della settimana memorizzato, ma voglio evitarlo. Esiste una soluzione che utilizza un indice o sbaglio e questa query funziona davvero bene? (Ciò significa che non deve passare attraverso ogni riga per calcolare il risultato.)

È stato utile?

Soluzione

Se vuoi tutto ogni lunedì, avrai bisogno di un campo o di una scansione sequenziale. Quello che potresti fare è calcolare le date effettive, ad esempio per tutti i lunedì entro un anno. La condizione WHERE date IN ('2009-03-02', '2009-02-23', ...) utilizza l'indice

Altri suggerimenti

O in alternativa al suggerimento di vartec, costruisci una tabella del calendario composta solo da una data e un nome di giorno per ogni giorno dell'anno (entrambi indicizzati) e quindi esegui la tua query facendo un JOIN contro questa tabella.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top