MONTHS_BETWEEN スカラー関数
MONTHS_BETWEEN 関数は、expression1 および expression2 の間の推定月数を戻します。
スキーマは SYSIBM です。
- expression1 または expression2
- DATE または TIMESTAMP データ・タイプの値を戻す式。
expression1 が expression2 よりも後の日付を表す場合、結果は正の値となります。 expression1 が expression2 よりも前の日付を表す場合、結果は負の値となります。
- expression1 および expression2 が表す日付またはタイム・スタンプの日の値が同じ場合、または、両方の引数がそれぞれ月の末日を表す場合は、タイム・スタンプの年および月の部分の値の差を表す整数が、結果となります。このとき、タイム・スタンプの時刻部分は無視されます。
- その他の場合、結果の整数部分は、年および月の値に基づく差となります。 結果の小数部分は、すべての月が 31 日であるという想定に基づいて残りの部分から算出されます。 引数がタイム・スタンプを表す場合、その引数は事実上最大精度のタイプ・スタンプとして処理され、結果を判別する際にこうした値の時刻部分も考慮されます。
関数の結果は DECIMAL(31,15) です。 引数のいずれかが NULL になる可能性がある場合、結果も NULL になる可能性があります。 引数が NULL の場合、結果は NULL 値になります。
例
- 例 1: プロジェクト AD3100 が費やす月数を計算します。 開始日付が 1982-01-01 で終了日付が 1983-02-01 であると想定します。
SELECT MONTHS_BETWEEN (PRENDATE, PRSDATE) FROM PROJECT WHERE PROJNO='AD3100'
結果は、13.000000000000000 になります。
- 例 2: ここに他の例をいくつか示します。
表 1. MONTHS_BETWEEN を使用した他の例 引数 e1 の値 引数 e2 の値
MONTHS_BETWEEN (e1,e2) によって返される値
ROUND
(
MONTHS_BETWEEN
(e1,e2)*31,2
) によって返される値コメント 2005-02-02 2005-01-01 1.032258064516129 32.00 2007-11-01-09.00.00.00000 2007-12-07-14.30.12.12345 -1.200945386592741 -37.23 2007-12-13-09.40.30.00000 2007-11-13-08.40.30.00000 1.000000000000000 31.00 注 1 を参照 2007-03-15 2007-02-20 0.838709677419354 26.00 注 2 を参照 2008-02-29 2008-02-28-12.00.00 0.016129032258064 0.50 2008-03-29 2008-02-29 1.000000000000000 31.00 2008-03-30 2008-02-29 1.032258064516129 32.00 2008-03-31 2008-02-29 1.000000000000000 31.00 注 3 を参照 注:- 両方の引数の日の値が同じであるため、時差は無視されます。
- 2 月は 28 日ありますが、すべての月に 31 日あると想定されるため、結果は 23 にはなりません。
- 両方の日がそれぞれの月の最後日なので、結果は年と月の部分のみに基づくため、結果は 33 にはなりません。