Získáte týden (neděle – sobota) čtvrtletí:
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
Vysvětlení :
- Neděli, která byla buď v den nebo těsně před daným datem, můžete najít pomocí
NEXT_DAY( TRUNC( date_value ), 'SUNDAY' ) - 7
(které závisí naNLS_TERRITORY
nastavení) neboTRUNC(hodnota_data + 1, 'IW' ) - 1
(který je kratší a nezávisí na žádném nastavení). TRUNC( date_value, 'Q' )
udává datum prvního dne čtvrtletí obsahujícíhohodnotu
datum (tj. buď 1. ledna, 1. dubna, 1. července nebo 1. října).- Když to dáme dohromady, neděle v nebo těsně před prvním dnem čtvrtletí je dána pomocí
TRUNC( TRUNC( datum_hodnota, 'Q' ) + 1, 'IW' ) - 1
- Proto je počet dní mezi nedělí v nebo těsně před začátkem čtvrtletí a nedělí v nebo těsně před daným datem:
( TRUNC( datum_hodnota + 1, ' IW' ) - 1 ) - ( TRUNC( TRUNC( hodnota_data, 'Q' ) + 1, 'IW' ) - 1 )
- což lze zjednodušit zrušením-1
podmínky. - Rozdíl v počtu týdnů je právě toto číslo vydělené 7 (ale dává nulovou indexovanou hodnotu a chcete, aby číslo týdne čtvrtletí bylo indexováno 1; buď k výsledku přidáte 1 týden, nebo před při dělení přidejte 7 dní).