トップページに戻る
次のSQLパズルへ
前のSQLパズルへ
3-40 指定月を年度開始とした年度を求める
SQLパズル
テーブル
yyyymm
------
200801
200802
200803
200804
200805
200812
200901
200902
200903
200904
200905
200906
4月を年度開始とした年度を求める。
6月を年度開始とした年度を求める。
出力結果
yyyymm nendo4 nendo6
------ ------ ------
200801 200700 200700
200802 200700 200700
200803 200700 200700
200804 200800 200700
200805 200800 200700
200812 200800 200800
200901 200800 200800
200902 200800 200800
200903 200800 200800
200904 200900 200800
200905 200900 200800
200906 200900 200900
200907 200900 200900
SQL
select yyyymm,
trunc(yyyymm-4,-2) as nendo4,
trunc(yyyymm-6,-2) as nendo6
from (select 200801 as yyyymm from dual union
select 200802 from dual union
select 200803 from dual union
select 200804 from dual union
select 200805 from dual union
select 200812 from dual union
select 200901 from dual union
select 200902 from dual union
select 200903 from dual union
select 200904 from dual union
select 200905 from dual union
select 200906 from dual union
select 200907 from dual);
解説
年度をグループ化したり、
年度でパーティションを切る
といった用途に使えるでしょう。
3-39 午前10時を基準としてグループ化
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
date型の場合は、下記のようになります。
col nendo4-1 for a10
col nendo6-1 for a10
select yyyymm,
to_char(yyyymm - interval '3' month,'yyyy') as "nendo4-1",
trunc(yyyymm - interval '3' month,'yyyy') as "nendo4-2",
to_char(yyyymm - interval '5' month,'yyyy') as "nendo6-1",
trunc(yyyymm - interval '5' month,'yyyy') as "nendo6-2"
from (select date '2008-01-01' as yyyymm from dual union
select date '2008-02-01' from dual union
select date '2008-03-01' from dual union
select date '2008-04-01' from dual union
select date '2008-05-01' from dual union
select date '2008-12-01' from dual union
select date '2009-01-01' from dual union
select date '2009-02-01' from dual union
select date '2009-03-01' from dual union
select date '2009-04-01' from dual union
select date '2009-05-01' from dual union
select date '2009-06-01' from dual union
select date '2009-07-01' from dual);
yyyymm nendo4 nendo6
-------- ------ ------
08-01-01 2007 2007
08-02-01 2007 2007
08-03-01 2007 2007
08-04-01 2008 2007
08-05-01 2008 2007
08-12-01 2008 2008
09-01-01 2008 2008
09-02-01 2008 2008
09-03-01 2008 2008
09-04-01 2009 2008
09-05-01 2009 2008
09-06-01 2009 2009
09-07-01 2009 2009
マニュアル(期間リテラル)より引用
INTERVAL '50' MONTH
は、
50か月(4年2か月)を示します。