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

Jak pomocí Oracle SQL získá jeden výstup číslo dne v týdnu a den v týdnu?

Florinova odpověď je, jak bych to udělal já, ale musíte si dávat trochu pozor na nastavení NLS. Den v týdnu je ovlivněn územím NLS, takže pokud to spustím, jako bych byl v USA, funguje to:

alter session set nls_territory = 'AMERICA';

select to_char(sysdate, 'D') as d, to_char(sysdate, 'Day') as day from dual;

D DAY
- ------------------------------------
6 Friday

select level as dow,
    to_char(trunc(sysdate ,'D') + level, 'Day') as day
from dual
connect by level <= 7;

DOW DAY
--- ------------------------------------
  1 Monday
  2 Tuesday
  3 Wednesday
  4 Thursday
  5 Friday
  6 Saturday
  7 Sunday

Ale stejný dotaz spuštěný ve Spojeném království je den volna:

alter session set nls_territory = 'UNITED KINGDOM';

select to_char(sysdate, 'D') as d, to_char(sysdate, 'Day') as day from dual;

D DAY
- ------------------------------------
5 Friday

select level as dow,
    to_char(trunc(sysdate ,'D') + level, 'Day') as day
from dual
connect by level <= 7;

DOW DAY
--- ------------------------------------
  1 Tuesday
  2 Wednesday
  3 Thursday
  4 Friday
  5 Saturday
  6 Sunday
  7 Monday

... a musím upravit výpočet, aby se to opravil:

select level as dow,
    to_char(trunc(sysdate ,'D') + level - 1, 'Day') as day
from dual
connect by level <= 7;

DOW DAY
--- ------------------------------------
  1 Monday
  2 Tuesday
  3 Wednesday
  4 Thursday
  5 Friday
  6 Saturday
  7 Sunday

Pokud chcete, můžete také samostatně zadat jazyk pro názvy dnů:

select level as dow,
    to_char(trunc(sysdate ,'day') + level - 1, 'Day',
        'NLS_DATE_LANGUAGE=FRENCH') as day
from dual
connect by level <= 7;

DOW DAY
--- --------------------------------
  1 Lundi
  2 Mardi
  3 Mercredi
  4 Jeudi
  5 Vendredi
  6 Samedi
  7 Dimanche

Dokumentace pro to_char() s nls_date_language a den v týdnu a další informace v průvodci podporou globalizace.



  1. Jak změnit barvu pozadí formuláře v Accessu 2016

  2. Jak přidáte sloupec NOT NULL do velké tabulky na serveru SQL?

  3. Oracle:Jak zjistit, zda existuje nevyřízená transakce?

  4. jak na Flashback, když máme dataguard