Dette vil få ugen (søndag - lørdag) i kvartalet:
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
Forklaring :
- Du kan finde søndagen, som enten var på eller lige før en given dato ved at bruge
NEXT_DAY( TRUNC(dato_value), 'SUNDAY' ) - 7
(som er afhængig afNLS_TERRITORY
indstilling) ellerTRUNC(dato_værdi + 1, 'IW' ) - 1
(som er kortere og ikke afhængig af nogen indstillinger). TRUNC(dato_værdi, 'Q' )
angiver datoen for den første dag i det kvartal, der indeholderværdien
dato (dvs. enten 1. januar, 1. april, 1. juli eller 1. oktober).- Sættes de to sammen, er søndagen på eller lige før den første dag i kvartalet givet af
TRUNC( TRUNC( dato_værdi, 'Q' ) + 1, 'IW' ) - 1
- Derfor er antallet af dage mellem søndagen på-eller-lige før kvartalets start og søndagen på-eller-lige før en given dato:
( TRUNC(dato_value + 1, ' IW' ) - 1 ) - ( TRUNC( TRUNC( dato_værdi, 'Q' ) + 1, 'IW' ) - 1 )
- hvilket kan forenkles ved at annullere-1
vilkår. - Antallet af ugers forskel er kun det tal divideret med 7 (men giver en 0-indekseret værdi, og du ønsker, at ugenummeret for kvartalet skal være 1-indekseret; enten tilføjer du 1 uge til resultatet eller før laver opdelingen, tilføj 7 dage).