È possibile determinare le date desiderate utilizzando combinazioni di giorno_prossimo e aritmetica della data regolare. Sotto il codice dovrebbe essere abbastanza vicino, ma non è testato e probabilmente fallisce in qualche caso d'angolo, ma almeno hai un'idea generale :)
where resolved_date >= next_day( trunc(sysdate) - interval '14' day, 'SUN')
and resolved_date < next_day( trunc(sysdate) - interval '7' day, 'SUN')
trunc(sysdate)
troncare la data al giorno; 2011-04-19 23:32:34 diventa 2011-04-19 00:00:00, ovvero rimuovendo il componente ora.next_day(sysdate, 'SUN')
ritorna la domenica successiva. Se sysdate è domenica, viene restituita la domenica successiva.
Importante :I nomi dei giorni devono essere nella stessa lingua della tua sessione.
L' interval
la cosa è solo un modo standard per aggiungere/sottrarre diverse unità di tempo da una data.
Mettendo tutto insieme, la logica per il 19 aprile 2011 sarebbe:
- Tronca data di sistema => 19-04-2011 00:00:00
- sottrai 14 giorni => 05-04-2011 00:00:00
- Trova la prossima domenica => 2011-04-10 00:00:00
...e
- Tronca data di sistema => 19-04-2011 00:00:00
- sottrai 7 giorni => 2011-04-12 00:00:00
- Trova la prossima domenica => 2011-04-17 00:00:00
..con conseguente interrogazione:
where resolved_date >= timestamp '2011-04-10 00:00:00'
and resolved_date < timestamp '2011-04-17 00:00:00'
Verrebbero incluse tutte le date_risolte che si sono verificate il o dopo il primo secondo del 10:esimo ma prima del primo secondo del 17:esimo. Nota che >=
e <
non è equivalente a between
.
Una nota sulle prestazioni:mi assicurerei che Oracle stimi correttamente l'intervallo di date in 7 giorni e che venga utilizzato l'ordine/metodo di unione corretto. Se prevedi che la query venga eseguita per un po', puoi permetterti di calcolare le date nell'applicazione e fornirle come valori letterali invece di calcolarle al volo come ho fatto sopra.