sql >> Databasteknik >  >> RDS >> Oracle

Hur man bestämmer veckan i ett kvartal i Oracle-frågan

Detta kommer att få veckan (söndag - lördag) i kvartalet:

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

Förklaring :

  • Du kan hitta söndagen som var antingen på eller strax före ett givet datum med NEXT_DAY( TRUNC( date_value ), 'SUNDAY' ) - 7 (vilket är beroende av NLS_TERRITORY inställning) eller TRUNC( datum_värde + 1, 'IW' ) - 1 (vilket är kortare och inte beroende av några inställningar).
  • TRUNC( datum_värde, 'Q' ) anger datumet för den första dagen i kvartalet som innehåller värdet datum (dvs. antingen 1 januari, 1 april, 1 juli eller 1 oktober).
  • Om de två sätts samman, söndagen på eller strax före den första dagen i kvartalet ges av TRUNC( TRUNC( date_value, 'Q' ) + 1, 'IW' ) - 1
  • Därför är antalet dagar mellan söndagen på-eller-precis-före början av kvartalet och söndagen på-eller-precis-före ett givet datum:( TRUNC( datum_värde + 1, ' IW' ) - 1 ) - ( TRUNC( TRUNC( datum_värde, 'Q' ) + 1, 'IW' ) - 1 ) - vilket kan förenklas genom att avbryta -1 villkor.
  • Antalet veckors skillnad är bara det siffran delat med 7 (men ger ett 0-indexerat värde och du vill att veckotalet för kvartalet ska vara 1-indexerat; antingen lägger du till 1 vecka till resultatet eller, före gör divisionen, lägg till 7 dagar).



  1. Django implementering av standardvärde i databasen

  2. Gå med två tabeller mysql, en till många relation

  3. För att få datum från datetime i sql

  4. PostgreSQL-index på JSON