Dit krijgt de week (zondag - zaterdag) van het kwartaal:
SELECT TO_CHAR( SYSDATE, 'YYYY-"Q"Q-"W"' )
|| ( 7 + TRUNC( SYSDATE + 1, 'IW' ) - TRUNC( TRUNC( SYSDATE, 'Q' ) + 1, 'IW' ) ) / 7;
AS "Current Time"
FROM DUAL
Uitleg :
- Je kunt de zondag vinden die op of net voor een bepaalde datum viel met
NEXT_DAY( TRUNC( date_value ), 'SUNDAY' ) - 7
(die afhankelijk is van deNLS_TERRITORY
instelling) ofTRUNC( date_value + 1, 'IW' ) - 1
(wat korter is en niet afhankelijk van instellingen). TRUNC( date_value, 'Q' )
geeft de datum van de eerste dag van het kwartaal met devalue
datum (d.w.z. 1 januari, 1 april, 1 juli of 1 oktober).- Als we de twee samenvoegen, wordt de zondag op of net voor de eerste dag van het kwartaal gegeven door
TRUNC( TRUNC( date_value, 'Q' ) + 1, 'IW' ) - 1
- Daarom is het aantal dagen tussen de zondag op of net voor het begin van het kwartaal en de zondag op of net voor een bepaalde datum:
( TRUNC( date_value + 1, 'IW' ) - 1 ) - ( TRUNC( TRUNC( date_value, 'Q' ) + 1, 'IW' ) - 1 )
- wat kan worden vereenvoudigd door de-1
. te annuleren voorwaarden. - Het aantal weken verschil is precies dat getal gedeeld door 7 (maar geeft een 0-geïndexeerde waarde en je wilt dat het weeknummer van het kwartaal 1-geïndexeerd is; je voegt ofwel 1 week toe aan het resultaat of, voorafgaand aan doe de verdeling, voeg 7 dagen toe).