Oracle SQL 関数 : TO_YMINTERVAL : 文字列を年月期間型に変換
YM_Ret := TO_YMINTERVAL( strPara );
TO_YMINTERVAL 関数は指定文字列を INTERVAL YEAR TO MONTH型に変換します。
strPara : "[+|-]YY-MM" YY:年数、MM:月数、+:加算(デフォルト値)、-:減算
TO_YMINTERVAL 関数の戻り値を日付データに加算することで、期間後(前)の日付が計算できます。
以下に TO_YMINTERVAL 関数の例を示します。
3 ,SYSDATE + TO_YMINTERVAL( '01-00' ) AS "1年後" |
4 ,SYSDATE + TO_YMINTERVAL( '-01-00' ) AS "1年前" |
5 ,SYSDATE + TO_YMINTERVAL( '+00-01' ) AS "1月後" |
6 ,SYSDATE + TO_YMINTERVAL( '-00-01' ) AS "1月前" |
7 ,SYSDATE + TO_YMINTERVAL( '01-02' ) AS "1年2月後" |
21-04-21 22-04-21 20-04-21 21-05-21 21-03-21 22-06-21 |
少し気になったので以下をテストしてみました。
・日付に「うるう日」を指定し、1年後の計算を行うと、エラーが発生しました。
・日付に「うるう日」を指定し、1か月後の加算を行うと、エラーは発生しませんでした。
・「大の月の31日」の1か月後の加算を行うと、エラーが発生しました。
2 TO_DATE( '2020/02/29' ) + TO_YMINTERVAL( '01-00' ) AS "うるう日の1年後" |
TO_DATE( '2020/02/29' ) + TO_YMINTERVAL( '01-00' ) AS "うるう日の1年後" |
ORA-01839: 指定された月に対して日付が無効です |
2 TO_DATE( '2020/02/29' ) + TO_YMINTERVAL( '00-01' ) AS "うるう日の1月後" |
2 TO_DATE( '2021/03/31' ) + TO_YMINTERVAL( '00-01' ) AS "大の月の1月後" |
TO_DATE( '2021/03/31' ) + TO_YMINTERVAL( '00-01' ) AS "大の月の1月後" |
ORA-01839: 指定された月に対して日付が無効です |
上記から言えるのは TO_YMINTERVAL 関数で指定された「年、月」をそのまま指定日付の「年」及び「月」に加算して
結果を日付とするため、加算後の年月日があり得ない日付であればエラーが出ると思います。
この関数は使い方に注意が必要です。
本書用のWebアプリを使ってSQLを実行し学習していきます。初心者の方に分かりやすく、図表を多く使って解説されています。 学習の最後には200問越えのドリルが付いていてSQLのスキルが試せる様になっています。