Oracle SQL 関数 : TO_YMINTERVAL : 文字列を年月期間型に変換

 YM_Ret := TO_YMINTERVAL( strPara );

 TO_YMINTERVAL 関数は指定文字列を INTERVAL YEAR TO MONTH型に変換します。
  strPara : "[+|-]YY-MM"  YY:年数、MM:月数、+:加算(デフォルト値)、-:減算

TO_YMINTERVAL 関数の戻り値を日付データに加算することで、期間後(前)の日付が計算できます。
以下に TO_YMINTERVAL 関数の例を示します。

SQL> SELECT
  2   SYSDATE AS "当日"
  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月後"
  8  FROM DUAL;

当日     1年後    1年前    1月後    1月前    1年2月
-------- -------- -------- -------- -------- --------
21-04-21 22-04-21 20-04-21 21-05-21 21-03-21 22-06-21

少し気になったので以下をテストしてみました。
・日付に「うるう日」を指定し、1年後の計算を行うと、エラーが発生しました。
・日付に「うるう日」を指定し、1か月後の加算を行うと、エラーは発生しませんでした。
・「大の月の31日」の1か月後の加算を行うと、エラーが発生しました。

SQL> SELECT
  2   TO_DATE('2020/02/29') + TO_YMINTERVAL('01-00') AS "うるう日の1年後"
  3  FROM DUAL;
 TO_DATE('2020/02/29') + TO_YMINTERVAL('01-00') AS "うるう日の1年後"
                       *
行2でエラーが発生しました。:
ORA-01839: 指定された月に対して日付が無効です


SQL> SELECT
  2   TO_DATE('2020/02/29') + TO_YMINTERVAL('00-01') AS "うるう日の1月後"
  3  FROM DUAL;

うるう日
--------
20-03-29

SQL> SELECT
  2   TO_DATE('2021/03/31') + TO_YMINTERVAL('00-01') AS "大の月の1月後"
  3  FROM DUAL;
 TO_DATE('2021/03/31') + TO_YMINTERVAL('00-01') AS "大の月の1月後"
                       *
行2でエラーが発生しました。:
ORA-01839: 指定された月に対して日付が無効です


上記から言えるのは TO_YMINTERVAL 関数で指定された「年、月」をそのまま指定日付の「年」及び「月」に加算して 結果を日付とするため、加算後の年月日があり得ない日付であればエラーが出ると思います。

この関数は使い方に注意が必要です。