sql >> Databáze >  >> RDS >> Oracle

Jak určit týden čtvrtletí v dotazu Oracle

Získáte týden (neděle – sobota) čtvrtletí:

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

Vysvětlení :

  • Neděli, která byla buď v den nebo těsně před daným datem, můžete najít pomocí NEXT_DAY( TRUNC( date_value ), 'SUNDAY' ) - 7 (které závisí na NLS_TERRITORY nastavení) nebo TRUNC(hodnota_data + 1, 'IW' ) - 1 (který je kratší a nezávisí na žádném nastavení).
  • TRUNC( date_value, 'Q' ) udává datum prvního dne čtvrtletí obsahujícího hodnotu datum (tj. buď 1. ledna, 1. dubna, 1. července nebo 1. října).
  • Když to dáme dohromady, neděle v nebo těsně před prvním dnem čtvrtletí je dána pomocí TRUNC( TRUNC( datum_hodnota, 'Q' ) + 1, 'IW' ) - 1
  • Proto je počet dní mezi nedělí v nebo těsně před začátkem čtvrtletí a nedělí v nebo těsně před daným datem:( TRUNC( datum_hodnota + 1, ' IW' ) - 1 ) - ( TRUNC( TRUNC( hodnota_data, 'Q' ) + 1, 'IW' ) - 1 ) - což lze zjednodušit zrušením -1 podmínky.
  • Rozdíl v počtu týdnů je právě toto číslo vydělené 7 (ale dává nulovou indexovanou hodnotu a chcete, aby číslo týdne čtvrtletí bylo indexováno 1; buď k výsledku přidáte 1 týden, nebo před při dělení přidejte 7 dní).



  1. Tabulka s 80 miliony záznamů a přidání indexu trvá více než 18 hodin (nebo navždy)! Co teď?

  2. Jak lze při použití živé funkce jquery odeslat pouze událost kliknutí (div)?

  3. MYSQL - Vytvořte jeden SQL dotaz z více dotazů

  4. Pochopení problému s nečistým čtením se serverem SQL