MONTHS_BETWEEN スカラー関数

MONTHS_BETWEEN 関数は、2 つの引数の間の見積もりの月数を戻します。

構文図を読むビジュアルシンタックスダイアグラムをスキップするMONTHS_BETWEEN( expression1, expression2)

スキーマは SYSIBM です。

expression1 または expression2
日付、タイム・スタンプ、文字ストリング、またはグラフィック・ストリングのいずれかの組み込みデータ・タイプの値を戻す式。 いずれかの式が文字ストリングまたはグラフィック・ストリングの場合、ストリングは CLOB または DBCLOB であってはなりません。このストリングの値は、日付またはタイム・スタンプの有効なストリング表現であることが必要で、実際の長さは 255 バイトを超えてはなりません。 タイム・スタンプのストリング表現内のタイム・ゾーンは無視されます。 日付とタイムスタンプの文字列表現の有効な形式については、「日時値の文字列表現」 を参照してください。

expression1 が TIMESTAMP WITH TIME ZONE 値である場合、expression1 は、最初に expression1 と同じ精度を持つ TIMESTAMP WITHOUT TIME ZONE にキャストされます。 expression2 が TIMESTAMP WITH TIME ZONE 値である場合、expression2 は、最初に expression2 と同じ精度を持つ TIMESTAMP WITHOUT TIME ZONE にキャストされます。

expression1expression2 よりも後の日付を表す場合、結果は正の値となります。 expression1expression2 より前の日付を表す場合、結果は負です。

  • expression1expression2 が同じ月の日の日付またはタイム・スタンプを表すか、両方の引数がそれぞれの月の最後の日を表す場合、結果は年と月の値に基づく整数の差分です。タイム・スタンプ引数の時刻部分は無視されます。
  • ただし、結果の整数部分は、年と月の値に基づく差です。 結果の小数部分は、すべての月が 31 日であるという想定に基づいて残りの部分から算出されます。 いずれかの引数がタイム・スタンプを表す場合、引数は事実上最大の精度を持つタイム・スタンプとして処理され、これらの値の時刻部分も結果を決定するときに考慮されます。

関数の結果は DECIMAL(31,15) です。

結果は NULL 値になることがあります。いずれかの引数が NULL 値である場合、結果は NULL 値になります。

例 1: 以下の例は、2 つの日付の間の月数を計算します。
   SELECT MONTHS_BETWEEN ('2008-01-17','2008-02-17') 
       AS MONTHS_BETWEEN
       FROM SYSIBM.SYSDUMMY1;
このステートメントの結果は以下の結果と似たものになります。
MONTHS_BETWEEN
----------------------------

-1.00000000000000
例 2: 以下の例は、2 つの日付の間の月数を計算します。
   SELECT MONTHS_BETWEEN ('2008-02-20','2008-01-17') 
       AS MONTHS_BETWEEN 
       FROM SYSIBM.SYSDUMMY1;
このステートメントの結果は以下の結果と似たものになります。
MONTHS_BETWEEN
----------------------------

1.096774193548387
例 3: プロジェクト AD3100 にかかる月数を計算します。 開始日が 1982-01-01、終了日が 1983-02-01 であるとします。
SELECT MONTHS_BETWEEN (PRENDATE, PRSDATE)  
       FROM PROJECT
       WHERE PROJNO='AD3100';
結果は 13.000000000000000 です。

例 4: 次の表は、特定の状況における MONTHS_BETWEEN 関数の使用法を示しています。

表 1. MONTHS_BETWEEN を使用した他の例
価値 expression1 価値 expression2 MONTHS_BETWEEN (expression1,expression2) によって戻される値 ROUND ( MONTHS_BETWEEN (expression1,expression2)*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.0000000000000001 31.001
2007-03-15 2007-02-20 0.8387096774193542 26.002
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.0000000000000003 31.003
注:
  1. 両方の引数の日の値が同じであるため、時差は無視されます。
  2. 2 月は 28 日ありますが、すべての月に 31 日あると想定されるため、結果は 23 にはなりません。
  3. 両方の日がそれぞれの月の最後日なので、結果は年と月の部分のみに基づくため、結果は 33 にはなりません。