トップページに戻る    次のSQLパズルへ    前のSQLパズルへ

10-27 時間の連番を作成

SQLパズル

以下のデータを作成する。

時間
----
4時
5時
6時
7時
8時
9時
10時
11時
12時
13時
14時
15時
16時
(システム時刻まで)


SQL

--■■■dualテーブルに対する階層問い合わせを使う方法(10g以降)■■■
select to_char(RowNum+3) || '時' as 時間
from dual
connect by Level+3 <= to_number(to_char(sysdate,'HH24'));

--■■■all_catalogを使う方法■■■
select to_char(RowNum+3) || '時' as 時間
from all_catalog
where RowNum+3 <= to_number(to_char(sysdate,'HH24'));

--■■■クロスジョインを使う方法■■■
select to_char(RowNum+3) || '時' as 時間
from (select 1 from dual union all select 2 from dual),
     (select 1 from dual union all select 2 from dual),
     (select 1 from dual union all select 2 from dual),
     (select 1 from dual union all select 2 from dual),
     (select 1 from dual union all select 2 from dual)
where RowNum+3 <= to_number(to_char(sysdate,'HH24'));


解説

all_catalogデータディクショナリビューは、
連番を作成するのに使えます。

クロスジョインを使う方法では、Log2(24-3) = 4.39....なので、
(select 1 from dual union all select 2 from dual)を5個使ってます。