月の差分を整数で取得するfunctionです。
DATE型版と、日付文字列版 の2つを用意しました。
サンプル(DATE型版)
例1)2つのDATE型日付の月の差分を整数で返すFunction
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
CREATE OR REPLACE FUNCTION GET_MONTH_DIFF_DATE fromDate IN DATE, toDate IN DATE ) RETURN NUMBER IS ret NUMBER; BEGIN SELECT MONTHS_BETWEEN( TRUNC(toDate, 'MM') ,TRUNC(fromDate, 'MM') ) INTO ret FROM dual; RETURN ret; END; / |
- 実行例
- SQL> SELECT GET_MONTH_DIFF_DATE(TO_DATE('2022/01/31'), TO_DATE('2022/04/30')) FROM dual; GET_MONTH_DIFF_DATE ----------------- 3
サンプル(日付文字列版)
例2)2つの日付文字列の月の差分を整数で返すFunction
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
CREATE OR REPLACE FUNCTION GET_MONTH_DIFF_YMD fromYMD IN VARCHAR2, toYMD IN VARCHAR2 ) RETURN NUMBER IS ret NUMBER; BEGIN SELECT MONTHS_BETWEEN( TRUNC(TO_DATE(toYMD, 'YYYY/MM/DD'), 'MM') ,TRUNC(TO_DATE(fromYMD, 'YYYY/MM/DD'), 'MM') ) INTO ret FROM dual; RETURN ret; END; / |
- 実行例
- SQL> SELECT GET_MONTH_DIFF_YMD('2022/01/31', '2022/04/30') FROM dual; GET_MONTH_DIFF_YMD ----------------- 3
指定した日付文字列が不正な場合は、Exceptionが発生します。
備考
- 返る月の差分は、日付部分を考慮しない月の差分です。
(例)
2022/01/XX と 2022/01/XX → 0
2022/01/XX と 2022/02/XX → 1
2022/01/XX と 2021/12/XX → -1