TIMESTAMPDIFF スカラー関数
TIMESTAMPDIFF 関数は、2 つのタイム・スタンプの間の差に基づいて、最初の 引数で定義されたタイプの見積もり間隔数を戻します。
スキーマは SYSIBM です。
- 数値式
- 組み込みの SMALLINT データ・タイプまたは INTEGER データ・タイプの値を戻す式。 この値は、2 つのタイム・スタンプの間の差を判別するのに使用する間隔を指定します。 下の表は、numeric-expression の有効値をリストしています。
表 1. 2 つのタイム・スタンプの間の差を判別するのに使 用する numeric-expression およびそれに相当する間隔に対する有効値 numeric-expression に対する有効値 相当する間隔 1 マイクロ秒 2 秒 4 分 8 時間 16 日 32 週 64 月 128 四半期 256 年 - 文字列式
LOB 以外の組み込みの文字ストリング・データ・タイプまたはグラフィック・ストリング・データ・タイプの値を戻す式。 この値は、2 つのタイム・スタンプの減算を行い、その結果を長さ 22 の文字ストリングに変換した結果となることが予想されます。 ストリング値の小数点の右側が 6 桁を超えてはなりません。
指定された引数が グラフィック・ストリングの場合、この引数は最初に文字ストリングに変換されてから 関数を実行します。以下の表は、string-expression のエレメントについて説明しています。表 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 小数点記号 period 0 マイクロ秒 000000 から 999999 1 から 6
この関数の結果は、2 番目の引数と同じ符号が付いた整数です。
結果は NULL 値になることがあります。いずれかの引数が NULL 値である場合、結果は NULL 値になります。
戻り値は、以下の表に示されているように、インターバルごとに決定されます。
| 結果として生成されるインターバル | 期間エレメントを使用した計算 |
|---|---|
| 年 | years |
| 四半期 | (月 + (年 * 12)) / 3 の整数値 |
| 月 | 月 + (年 * 12) |
| 週 | ((日 + (月 * 30)) / 7) + (年 * 52) の整数値 |
| 日 | 日 + (月 * 30) + (年 * 365) |
| 時間 | hours+ ((days + (months*30)+(years*365))*24) |
| 分 (期間の絶対値は 40850913020759.999999 を超えてはなりません) | minutes + (hours+((days+(months*30)+(years*365))*24))*60 |
| 秒 (期間の絶対値は 680105031408.000000 より小さくなければなりません) | 秒 + (分 + (時間 + ((日 + ( months*30 )
+ ( years*365 ))*24))*60 )*60 |
| マイクロ秒 (期間の絶対値は 3547.483648 より小さくなければなりません) | マイクロ秒 + (秒 + (分 * 60)) * 1000000 |
差の見積もりには、以下の前提が使用されます。
- 1 年は 365 日
- 1 年は 52 週
- 1 年は 12 カ月
- 1 カ月は 30 日
- 1 日は 24 時間
- 1 時間は 60 分
- 1 分は 60 秒
これらの前提事項の使用は、一部の結果値が間隔の見積もりであることを示します。 次の例を考慮してください。
- 月の日数が 30 日未満の場合の、1 カ月の差。
TIMESTAMPDIFF(16, CHAR(TIMESTAMP('1997-03-01-00.00.00') - TIMESTAMP('1997-02-01-00.00.00')))タイム・スタンプの算術計算の結果は、期間 00000100000000.000000、または 1 カ月です。 間隔引数に 16 (日数) を指定して TIMESTAMPDIFF 関数を呼び出すと、1 カ月に 30 日という前提事項が適用され、結果は 30 になります。
- 月の日数が 30 日未満の場合の、1 カ月より 1 日少ない差。
TIMESTAMPDIFF(16, CHAR(TIMESTAMP('1997-03-01-00.00.00') - TIMESTAMP('1997-02-02-00.00.00')))タイム・スタンプの算術計算の結果は、期間 00000027000000.000000、または 27 日です。 間隔引数に 16 (日数) を指定して TIMESTAMPDIFF 関数を呼び出すと、結果は 27 になります。
- 月の日数が 31 日である場合の、1 カ月より 1 日少ない差。
TIMESTAMPDIFF(64, CHAR(TIMESTAMP('1997-09-01-00.00.00') - TIMESTAMP('1997-08-02-00.00.00')))タイム・スタンプの算術計算の結果は、期間 00000030000000.000000、または 30 日です。 間隔引数 (月) に 64 を指定して TIMESTAMPDIFF 関数を呼び出すと、結果は 0 になります。 期間の日数部分は 30ですが、間隔が指定された月が経過したため無視されます。
SELECT
TIMESTAMPDIFF(64, CAST(CURRENT_TIMESTAMP-CAST(BIRTHDATE AS TIMESTAMP)
AS CHAR(22)))
AS AGE_IN_MONTHS
FROM EMPLOYEE;