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

10-2 Date型の年のみを変更

SQLパズル

Col(Date型)の、年が2020年のデータの年のみを2003年にして出力する。
ただし2020年2月29日は、2003年2月28日として出力する。


データ作成スクリプト

create table WrongDate(Col date);

begin
    for i in 1..380 loop
        insert into WrongDate values(to_date('20191228','yyyymmdd')+i);
    end loop;
    commit;
end;
/


SQL

--■■■case式を使う方法■■■
select to_char(Col,'yyyy/mm/dd') as Col,
case when to_char(Col,'yyyy/mm/dd') = '2020/02/29' then '2003/02/28'
     when to_char(Col,'yyyy')='2020' then to_char('2003/' || to_char(Col,'mm/dd'))
     else to_char(Col,'yyyy/mm/dd') end as FixedCol
from WrongDate
order by Col;

--■■■Replace関数を使う方法■■■
select to_char(Col,'yyyy/mm/dd') as Col,
replace(replace(to_char(Col,'yyyy/mm/dd'),'2020/','2003/'),'2003/02/29','2003/02/28') as FixedCol
from WrongDate
order by Col;


解説

case式で2月29日かチェックする方法や、
Replace関数を使う方法があります。