Oracle
 sql >> Database >  >> RDS >> Oracle

Come determinare la settimana di un trimestre nella query Oracle

Questo otterrà la settimana (domenica - sabato) del trimestre:

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

Spiegazione :

  • Puoi trovare la domenica che era o appena prima di una data data usando NEXT_DAY( TRUNC( date_value ), 'SUNDAY' ) - 7 (che dipende da NLS_TERRITORY impostazione) o TRUNC( date_value + 1, 'IW' ) - 1 (che è più breve e non dipende da alcuna impostazione).
  • TRUNC( date_value, 'Q' ) fornisce la data del primo giorno del trimestre contenente il value data (ovvero 1 gennaio, 1 aprile, 1 luglio o 1 ottobre).
  • Mettendo insieme i due, la domenica o appena prima del primo giorno del trimestre è data da TRUNC( TRUNC( date_value, 'Q' ) + 1, 'IW' ) - 1
  • Pertanto, il numero di giorni tra la domenica o appena prima dell'inizio del trimestre e la domenica o appena prima di una data data è:( TRUNC( date_value + 1, 'IW' ) - 1 ) - ( TRUNC( TRUNC( date_value, 'Q' ) + 1, 'IW' ) - 1 ) - che può essere semplificato cancellando il -1 termini.
  • Il numero di settimane di differenza è solo quel numero diviso per 7 (ma fornisce un valore indicizzato 0 e vuoi che il numero della settimana del trimestre sia indicizzato a 1; aggiungi 1 settimana al risultato o, prima di facendo la divisione, aggiungi 7 giorni).