Oracle SQL 関数 : ADD_MONTHS : 翌月日計算
dateRet := ADD_MONTHS( dateSrc , N );
ADD_MONTHSは日付dataSrcにNヵ月後の結果を返します。dataSrcの月数にNを加算した結果、日付が
その月の最終日を越える場合は、日の部分はその月の最終日を返します。
SQL> SELECT SYSDATE,ADD_MONTHS(SYSDATE,1) AS ADD_1, |
2 ADD_MONTHS(SYSDATE,13) AS ADD_13, |
3 ADD_MONTHS(TO_DATE( '2002/01/31' ),1) AS ADD_N FROM DUAL; |
SYSDATE ADD_1 ADD_13 ADD_N |
02-11-07 02-12-07 03-12-07 02-02-28 |
ADD_MONTHS の例として ADD_MONTHS(SYSDATE,13) はシステム日付の1年と1ヵ月後の日付を返します。
また、最後の ADD_MONTHS(TO_DATE('2002/01/31'),1) は1ヶ月後の2月には31日は存在しない為、2月の最終日が結果として帰ります。
指定された日付が月末の場合、月数を加算後の月の月末に合わせてくれる様です。
以下に例を示します。
閏(うるう)年の1月の末日に対して「1」を加算することで、2月の月末が結果として返されます。
2 ADD_MONTHS(TO_DATE( '2002/01/31' ), 1) AS "NOT-閏年" |
3 ,ADD_MONTHS(TO_DATE( '2004/01/31' ), 1) AS "閏年" |
ADD_MONTHS の加算される月数は正の整数のほか マイナス値 でも正常に動く様です。
以下にその例を示します。
閏年と閏年ではない2月の末日を指定日として「-1」を加算指定すると、結果は共に1月の末日が返されます。
2 ADD_MONTHS(TO_DATE( '2002/02/28' ), -1) AS "NOT-閏年" |
3 ,ADD_MONTHS(TO_DATE( '2004/02/29' ), -1) AS "閏年" |
本書用のWebアプリを使ってSQLを実行し学習していきます。初心者の方に分かりやすく、図表を多く使って解説されています。 学習の最後には200問越えのドリルが付いていてSQLのスキルが試せる様になっています。