Oracle
 sql >> Datenbank >  >> RDS >> Oracle

So bestimmen Sie die Woche eines Quartals in einer Oracle-Abfrage

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 von NLS_TERRITORY Einstellung) oder TRUNC( 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 den value 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).