Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Como determinar a semana de um trimestre na consulta Oracle


Isso obterá a semana (domingo - sábado) do 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

Explicação :
  • Você pode encontrar o domingo que foi ou um pouco antes de uma determinada data usando NEXT_DAY( TRUNC( date_value ), 'SUNDAY' ) - 7 (que depende do NLS_TERRITORY configuração) ou TRUNC( date_value + 1, 'IW' ) - 1 (que é mais curto e não depende de nenhuma configuração).
  • TRUNC( date_value, 'Q' ) dá a data do primeiro dia do trimestre que contém o valor data (ou seja, 1º de janeiro, 1º de abril, 1º de julho ou 1º de outubro).
  • Juntando os dois, o domingo anterior ou anterior ao primeiro dia do trimestre é dado por TRUNC( TRUNC( date_value, 'Q' ) + 1, 'IW' ) - 1
  • Portanto, o número de dias entre o domingo anterior ao início do trimestre e o domingo anterior a uma determinada data é:( TRUNC( date_value + 1, ' IW' ) - 1 ) - ( TRUNC( TRUNC( valor_data, 'Q' ) + 1, 'IW' ) - 1 ) - que pode ser simplificado cancelando o -1 termos.
  • A diferença do número de semanas é apenas esse número dividido por 7 (mas fornece um valor indexado a 0 e você deseja que o número da semana do trimestre seja indexado a 1; você adiciona 1 semana ao resultado ou, antes de fazendo a divisão, adicione 7 dias).