12

Oracle SQL を使用して、次の結果セットを作成するにはどうすればよいですか。

  • 曜日の番号 (1 ~ 7)
  • 曜日名(月曜日、火曜日、水曜日など)

例えば:

曜日名
1 月曜日
2 火曜日
3水曜日
4 木曜日
5 金曜日
6 土曜日
7 日曜日
4

4 に答える 4

24

フローリンの答えは私がどうするかということですが、NLSの設定には少し注意する必要があります。曜日はNLSの領域の影響を受けるため、米国にいるかのようにこれを実行すると、次のように機能します。

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

しかし、英国で実行されている同じクエリは休日です。

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

...そして私はそれを修正するために計算を調整する必要があります:

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

必要に応じて、曜日の名前に使用する言語を個別に指定することもできます。

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

グローバリゼーションサポートガイドのto_char()withnls_date_language曜日などのドキュメント。

于 2013-01-25T09:02:36.637 に答える
2
select level as dow, 
    to_char(level+trunc(sysdate,'D'),'Day') as day
from dual
connect by level <= 7;
于 2013-01-25T08:27:24.077 に答える
1

変更セッションなし

 CASE 
    WHEN to_char(sysdate, 'd')-1 = 0 THEN 7 
    ELSE to_char(sysdate, 'd')-1 
 END 
于 2020-12-11T13:31:30.813 に答える
-2
Select 1, 'Monday' from dual union all select 2, 'Tuesday' from dual ...
于 2013-01-25T08:14:33.550 に答える