Oracle
 sql >> Base de données >  >> RDS >> Oracle

Comment déterminer la semaine d'un trimestre dans une requête Oracle

Cela obtiendra la semaine (dimanche - samedi) du 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

Explication :

  • Vous pouvez trouver le dimanche qui était soit le soit juste avant une date donnée en utilisant NEXT_DAY( TRUNC( date_value ), 'SUNDAY' ) - 7 (qui dépend du NLS_TERRITORY paramètre) ou TRUNC( date_value + 1, 'IW' ) - 1 (qui est plus court et ne dépend d'aucun paramètre).
  • TRUNC( date_value, 'Q' ) donne la date du premier jour du trimestre contenant la value date (c'est-à-dire le 1er janvier, le 1er avril, le 1er juillet ou le 1er octobre).
  • En rassemblant les deux, le dimanche le ou juste avant le premier jour du trimestre est donné par TRUNC( TRUNC( date_value, 'Q' ) + 1, 'IW' ) - 1
  • Par conséquent, le nombre de jours entre le dimanche le ou juste avant le début du trimestre et le dimanche le ou juste avant une date donnée est :( TRUNC( date_value + 1, 'IW' ) - 1 ) - ( TRUNC( TRUNC( date_value, 'Q' ) + 1, 'IW' ) - 1 ) - qui peut être simplifié en supprimant le -1 termes.
  • La différence du nombre de semaines est juste ce nombre divisé par 7 (mais donne une valeur indexée sur 0 et vous voulez que le numéro de semaine du trimestre soit indexé sur 1 ; soit vous ajoutez 1 semaine au résultat, soit, avant faire la division, ajouter 7 jours).