Det är möjligt att bestämma vilka datum du vill använda med kombinationer av nästa_dag och vanlig datumräkning. Nedanstående kod borde vara ganska nära, men den är opröstad och misslyckas förmodligen på något hörnfodral, men du förstår åtminstone den allmänna uppfattningen :)
where resolved_date >= next_day( trunc(sysdate) - interval '14' day, 'SUN')
and resolved_date < next_day( trunc(sysdate) - interval '7' day, 'SUN')
trunc(sysdate)
trunkera datum till dag; 2011-04-19 23:32:34 blir 2011-04-19 00:00:00, dvs. tar bort tidskomponenten.next_day(sysdate, 'SUN')
återkommer nästa söndag. Om sysdate råkar vara en söndag, returneras nästa söndag.
Viktigt :Dagens namn måste vara på samma språk som din session.interval
sak är bara ett standardsätt att lägga till/subtrahera olika tidsenheter från ett datum.
Sammantaget skulle logiken för den 19 april 2011 vara:
- Truncate sysdate => 2011-04-19 00:00:00
- subtrahera 14 dagar => 2011-04-05 00:00:00
- Hitta nästa söndag => 2011-04-10 00:00:00
...och
- Truncate sysdate => 2011-04-19 00:00:00
- subtrahera 7 dagar => 2011-04-12 00:00:00
- Hitta nästa söndag => 2011-04-17 00:00:00
..som resulterar i följande fråga:
where resolved_date >= timestamp '2011-04-10 00:00:00'
and resolved_date < timestamp '2011-04-17 00:00:00'
Alla resolved_dates som inträffade på eller efter den första sekunden av den 10:e men före den första sekunden av den 17:e skulle inkluderas. Observera att >=
och <
motsvarar inte between
.
En notering om prestanda:Jag skulle se till att Oracle korrekt uppskattar datumintervallet till 7 dagar, och att rätt joinorder/metod används. Om du förväntar dig att frågan ska köras ett tag, har du råd att beräkna datumen i applikationen och tillhandahålla dem som datumbokstavar istället för att beräkna dem i farten som jag gjorde ovan.