TIMESTAMPDIFF スカラー関数

2 つのタイム・スタンプ間の差に基づいて、 最初の引数によって定義されたタイプのインターバル数の見積もりが戻されます。

Read syntax diagramSkip visual syntax diagramTIMESTAMPDIFF(numeric-expression,string-expression)

スキーマは SYSIBM です。 LEFT 関数の SYSFUN バージョンは引き続き使用可能です。

numeric-expression
組み込み INTEGER または SMALLINT データ・タイプの値を戻す式。 有効な値は次の表に定義されているインターバルを表します。
表 1. インターバルの有効値
間隔
1 マイクロ秒
2
4
8 時間
16
32
64
128 四半期
256
ストリング式
組み込み CHAR または VARCHAR データ・タイプの値を戻す式。 この値は、2 つのタイム・スタンプの減算を行い、その結果を CHAR に変換した結果となることが予想されます。 値が CHAR データ・タイプでも VARCHAR データ・タイプでもない場合、その値は関数を評価する前に暗黙的に VARCHAR にキャストされます。 Unicode データベースでは、指定した引数が GRAPHIC ストリングであると、 まず文字ストリングに変換されてから、関数が実行されます。

正/負符号がある場合、これはストリングの先頭文字です。 以下の表では、文字ストリング持続期間のエレメントを説明します。

表 2. TIMESTAMPDIFF ストリング・エレメント
ストリング・エレメント 有効値 小数点からの文字位置 (負は左方)
1 から 9998 またはブランク -14 から -11
0 から 11 またはブランク -10 から -9
0 から 30 またはブランク -8 から -7
時間 0 から 24 またはブランク -6 から -5
0 から 59 またはブランク -4 から -3
0 から 59 -2 から -1
小数点 期間 0
マイクロ秒 000000 から 999999 1 から 6

関数の結果として、2 番目の引数と符号が同じ INTEGER が生成されます。 結果は NULL になる可能性があります。引数が NULL の場合、結果は NULL 値になります。

戻り値は、以下の表に示されているように、インターバルごとに決定されます。

表 3. TIMESTAMPDIFF 計算
結果として生成されるインターバル 期間エレメントを使用した計算
四半期 (月 + (年 * 12)) / 3 の整数値
月 + (年 * 12)
((日 + (月 * 30)) / 7) + (年 * 52) の整数値
日 + (月 * 30) + (年 * 365)
時間 時 + ((日 + (月 * 30) + (年 * 365)) * 24)
分 (期間の絶対値は 40850913020759.999999 を超えてはなりません) minutes + (hours+((days+(months*30)+(years*365))*24))*60
秒 (期間の絶対値は 680105031408.000000 より小さくなければなりません) 秒 + (分 + (時間 + ((日 + (月 *30) + (年 *365))*24))*60 )*60
マイクロ秒 (期間の絶対値は 3547.483648 より小さくなければなりません) マイクロ秒 + (秒 + (分 * 60)) * 1000000
以下の前提事項が、差の見積もりに使用されます。
  • 1 年は 365 日である。
  • 1 カ月は 30 日である。
  • 1 日は 24 時間である。
  • 1 時間は 60 分である。
  • 1 分は 60 秒である。

上記の前提は、2 番目の引数の情報を最初の引数で指定されたインターバル・タイプに変換する際に使用されます。 戻される見積もりが、日数によって異なる場合があります。 例えば、 '1997-03-01-00.00.00' と '1997-02-01-00.00.00' の差の日数 (インターバル 16) が要求された場合、 結果は 30 になります。 これは、タイム・スタンプ相互間の差は 1 カ月であり、 1 カ月は 30 日であるという前提が適用されるからです。

以下の例は、2 つのタイム・スタンプにはさまれた分数である 4277 を戻します。
   TIMESTAMPDIFF(4,CHAR(TIMESTAMP('2001-09-29-11.25.42.483219') -
     TIMESTAMP('2001-09-26-12.07.58.065497')))