sql >> Database >  >> RDS >> Oracle

Hoe de week van een kwartaal te bepalen in Oracle-query

Dit krijgt de week (zondag - zaterdag) van het kwartaal:

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

Uitleg :

  • Je kunt de zondag vinden die op of net voor een bepaalde datum viel met NEXT_DAY( TRUNC( date_value ), 'SUNDAY' ) - 7 (die afhankelijk is van de NLS_TERRITORY instelling) of TRUNC( date_value + 1, 'IW' ) - 1 (wat korter is en niet afhankelijk van instellingen).
  • TRUNC( date_value, 'Q' ) geeft de datum van de eerste dag van het kwartaal met de value datum (d.w.z. 1 januari, 1 april, 1 juli of 1 oktober).
  • Als we de twee samenvoegen, wordt de zondag op of net voor de eerste dag van het kwartaal gegeven door TRUNC( TRUNC( date_value, 'Q' ) + 1, 'IW' ) - 1
  • Daarom is het aantal dagen tussen de zondag op of net voor het begin van het kwartaal en de zondag op of net voor een bepaalde datum:( TRUNC( date_value + 1, 'IW' ) - 1 ) - ( TRUNC( TRUNC( date_value, 'Q' ) + 1, 'IW' ) - 1 ) - wat kan worden vereenvoudigd door de -1 . te annuleren voorwaarden.
  • Het aantal weken verschil is precies dat getal gedeeld door 7 (maar geeft een 0-geïndexeerde waarde en je wilt dat het weeknummer van het kwartaal 1-geïndexeerd is; je voegt ofwel 1 week toe aan het resultaat of, voorafgaand aan doe de verdeling, voeg 7 dagen toe).



  1. MySQL-tabel met alleen een varchar als externe sleutel

  2. Is er een ECHT prestatieverschil tussen de primaire sleutels van INT en VARCHAR?

  3. query mysql-database vanuit een klasse

  4. Slaapstand op Oracle:tekenreekseigenschap toewijzen aan CLOB-kolom