MONTHS_BETWEEN スカラー関数

MONTHS_BETWEEN 関数は、expression1 および expression2 の間の推定月数を戻します。

Read syntax diagramSkip visual syntax diagramMONTHS_BETWEEN(expression1 ,expression2)

スキーマは SYSIBM です。

expression1 または expression2
DATE または TIMESTAMP データ・タイプの値を戻す式。
expression1expression2 よりも後の日付を表す場合、結果は正の値となります。 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 を参照
    注:
    1. 両方の引数の日の値が同じであるため、時差は無視されます。
    2. 2 月は 28 日ありますが、すべての月に 31 日あると想定されるため、結果は 23 にはなりません。
    3. 両方の日がそれぞれの月の最後日なので、結果は年と月の部分のみに基づくため、結果は 33 にはなりません。