AGE スカラー関数

AGE 関数は、2 つのタイム・スタンプ値の間の年数、月数、および日数を表す整数値を返します。

構文図を読む構文図をスキップする AGE ( expression1 ,expression2 )

スキーマは SYSIBM です。

expression1 および expression2
データ・タイプ DATE、TIMESTAMP、CHAR、または VARCHAR の値を返す式。 Unicode データベースでは、式はデータ・タイプ GRAPHIC または VARGRAPHIC にすることもできます。 データ・タイプ CHAR、VARCHAR、GRAPHIC、または VARGRAPHIC の値は、TIMESTAMP スカラー関数 スカラー関数で使用できる有効なストリングでなければなりません。 そのようなストリングは、変換される前にタイム・スタンプに暗黙的にキャストされます。

expression2 のデフォルトは CURRENT TIMESTAMP(12) です。

expression1expression2 の間が 1 日に満たない場合、結果はゼロになります。 expression1expression2 より前の場合、結果は正の値になります。expression1expression2 より後の場合、結果は負の値になります。

次の 2 つの式は等価です。
AGE(expression1,expression2)
INTEGER((TIMESTAMP(expression2,12) – TIMESTAMP(expression1,12)) / 1000000)
タイム・スタンプの減算およびその他のタイム・スタンプの算術について詳しくは、日付/時刻演算と期間を参照してください。

結果

結果は、タイム・スタンプ期間の年、月、および日のコンポーネントの整数表現となります。例えば、整数 71028 は、expression2 によって返されるタイム・スタンプが、expression1 によって返されるタイム・スタンプよりも 7 年 10 カ月 28 日遅いことを示します。

  • 決定論: AGE は決定論的な関数です。
  • expression2 が指定されていない場合、AGE 関数の呼び出しは、特殊レジスター CURRENT TIMESTAMP の値によって決まるため、特殊レジスターがサポートされている場合にのみ使用できます (SQLSTATE 42621、428EC、または 429BX)。

CURRENT TIMESTAMP(12) が 2013-09-24-11.28.00.123456789012 であるとします。
  • ホスト変数 AGE1 に、2012-02-28-12.00.00 と現在のタイム・スタンプの間の年数、月数、および日数の数値を設定します。(指定されたタイム・スタンプの時刻コンポーネントが、現在のタイム・スタンプの時刻コンポーネントよりも少し後ろになっています。)
    SET :AGE1 = AGE(TIMESTAMP '2012-02-28-12.00.00')
    ホスト変数 AGE1 は 10624 に設定されます。これは、2 つのタイム・スタンプの間の期間が 1 年 6 カ月 24 日であることを表します。
  • ホスト変数 AGE1 に、2012-02-28-11.00.00 (前の例のタイム・スタンプより 1 時間早い) と現在のタイム・スタンプの間の年数、月数、および日数の数値を設定します。(指定されたタイム・スタンプの時刻コンポーネントが、現在のタイム・スタンプの時刻コンポーネントよりも少し前になっています。)
    SET :AGE1 = AGE(TIMESTAMP '2012-02-28-11.00.00')
    ホスト変数 AGE1 は 10625 に設定されます。
  • ホスト変数 AGE1 に、2013-09-23-12.00.00 と現在のタイム・スタンプの間の年数、月数、および日数の数値を設定します。
    SET :AGE1 = AGE(TIMESTAMP '2013-09-23-12.00.00')
    2 つのタイム・スタンプ間の期間が 1 日もないため、ホスト変数 AGE1 は 0 に設定されます。
  • ホスト変数 AGE1 に、2020-01-01 と 2013-09-24 の間の年数、月数、および日数の数値を設定します。
    SET :AGE1 = AGE(DATE '2020-01-01', DATE '2013-09-24')

    2 つのタイム・スタンプ間の期間が 6 年 3 カ月 6 日であるため、ホスト変数 AGE1 は -60306 に設定されます。最初のタイム・スタンプが 2 番目のタイム・スタンプより後ろであるため、値は負になります。