トップページに戻る
次のSQLパズルへ
前のSQLパズルへ
10-323 年ごとの四半期を求める
SQLパズル
二つの日付型から年を取り出し、
その2つの年の間の四半期を求める。
出力結果
Val
-------------
2007-Quarter1
2007-Quarter2
2007-Quarter3
2007-Quarter4
2008-Quarter1
2008-Quarter2
2008-Quarter3
2008-Quarter4
SQL
--■■■model句を使う方法(10g以降)■■■
select to_char(nen) || '-Quarter' || to_char(Q) as Val
from dual
model return updated rows
dimension by(0 as nen,0 as Q)
measures(0 as dummy)
rules(dummy[for nen from extract(year from date '2007-01-01')
to extract(year from date '2008-02-28')
increment 1,for Q in(1,2,3,4)] = 0);
--■■■表関数を使う方法■■■
create or replace Package Pack10_322 Is
type PrintTypeSet is table of varchar2(20);
end;
/
create or replace function FuncQ(fromD date,ToD date) return Pack10_322.PrintTypeSet PipeLined IS
outR varchar2(20);
begin
for nen in to_number(to_char(fromD,'yyyy'))
..to_number(to_char(ToD,'yyyy')) Loop
for Q in 1..4 Loop
outR := to_char(nen) || '-Quarter' || to_char(Q);
pipe row(outR);
end Loop;
end Loop;
end;
/
sho err
select Column_Value as Val from table(FuncQ(date '2007-01-01',date '2008-02-28'));
解説
補完列が複数列の時は、model句のforコンストラクトの位置参照を使うとシンプルになりますねぇ