Dies wird die Woche (Sonntag - Samstag) des Quartals erhalten:
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
Erklärung :
- Mit
NEXT_DAY( TRUNC( date_value ), 'SUNDAY' ) - 7
können Sie den Sonntag finden, der entweder auf oder kurz vor einem bestimmten Datum lag (was abhängig ist vonNLS_TERRITORY
Einstellung) oderTRUNC( date_value + 1, 'IW' ) - 1
(was kürzer ist und nicht von irgendwelchen Einstellungen abhängt). TRUNC( date_value, 'Q' )
gibt das Datum des ersten Tages des Quartals an, das denvalue
enthält Datum (d. h. entweder 1. Januar, 1. April, 1. Juli oder 1. Oktober).- Wenn man die beiden zusammennimmt, ergibt sich der Sonntag am oder kurz vor dem ersten Tag des Quartals durch
TRUNC( TRUNC( date_value, 'Q' ) + 1, 'IW' ) - 1
- Daher ist die Anzahl der Tage zwischen dem Sonntag am oder kurz vor dem Beginn des Quartals und dem Sonntag am oder kurz vor einem bestimmten Datum:
( TRUNC( date_value + 1, 'IW' ) - 1 ) - ( TRUNC( TRUNC( date_value, 'Q' ) + 1, 'IW' ) - 1 )
- was durch Streichen des-1
vereinfacht werden kann Bedingungen. - Die Anzahl der Wochenunterschiede ist einfach diese Zahl dividiert durch 7 (ergibt aber einen 0-indizierten Wert und Sie möchten, dass die Wochennummer des Quartals 1-indiziert wird; Sie addieren entweder 1 Woche zum Ergebnis oder vor bei der Division 7 Tage addieren).