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

4-20 指定年の最初の日曜日を求める

SQLパズル

2000年から2015年までの、最初の日曜日を求める。

出力結果
Val   FirstSun
----  --------
2000  2000/1/2
2001  2001/1/7
2002  2002/1/6
2003  2003/1/5
2004  2004/1/4
2005  2005/1/2
2006  2006/1/1
2007  2007/1/7
2008  2008/1/6
2009  2009/1/4
2010  2010/1/3
2011  2011/1/2
2012  2012/1/1
2013  2013/1/6
2014  2014/1/5
2015  2015/1/4

こちらを参考にさせていただきました


データ作成スクリプト

create table yyyyTable(Val) as
select cast(Column_Value as varChar2(5)) from table(sys.odciVarchar2List(
'2000','2001','2002','2003','2004',
'2005','2006','2007','2008','2009',
'2010','2011','2012','2013','2014','2015'));


SQL

--■■■next_day関数を使う方法■■■
select Val,next_day(to_date(Val || '01','yyyymm')-1,'日') as FirstSun
  from yyyyTable;

--■■■trunc関数を使う方法■■■
select Val,trunc(to_date(Val || '01','yyyymm')+6,'day') as FirstSun
  from yyyyTable;


解説

指定曜日を求めるのは、next_day関数が有名ですが、
日曜日であれば、trunc(sysdate,'day')
なんてのもあります。

NEXT_DAY - オラクル・Oracle SQL 関数リファレンス