INTERVAL スカラー関数
INTERVAL 関数は、間隔の文字ストリング表現を 10 進数の期間に変換します。
スキーマは SYSIBM です。
構文
- string-constant
- 間隔の文字ストリング表現。以下に例を示します。
'4 years 2 months 3 days' '3 day 4 year 2 month' '-4y -2 m -3d' '-2 hr -21 min -34sec' '4years 2months 3 days 2 hours 21minutes 34seconds 75 milliseconds 27 microseconds' '2 mons 3 days 4 yrs 2 hrs 20 mins 30 secs 75 ms 27 us'注:- 入力は、式または列の値ではなく、ストリング定数でなければなりません (SQLSTATE=42815 の sqlcode SQL0171N)。
- 各値とその単位キーワードの間のブランクはオプションです。
- 値はすべてが正かすべて負でなければなりません。
- 単位キーワードは大文字小文字を区別しません。
- 単位キーワードの順序は重要ではありません。
- 単位キーワードは複数回使用することはできません。
- 単位ごとに指定する数値は整数でなければなりません。
- 次のステートメントは等価です。
INTERVAL (string-constant) CAST (string-constant as INTERVAL)
指定される間隔のタイプは以下のいずれかになります。- 時間間隔
- 入力値は、時間、分、および秒以外の単位を含むことはなく、「
99h 99m 99s」と同等の値を超えることはできません (SQLSTATE=42604 の sqlcode SQL0105N)。99 を超える分の値は時間に変換され、99 を超える秒の値は分に変換されます。例えば、100 秒は、1 分と 40 秒に変換されます。 - 日付間隔
- 入力値は、年、月、および日以外の単位を含まず、「
9999y 99m 99d」と同等の値を超えることはできません (SQLSTATE=42604 の sqlcode SQL0105N)。99 を超える月の値は年に変換され、99 を超える日の値は 30 日からなる月に変換されます。例えば、100 日は 3 カ月と 10 日に変換されます。 - タイム・スタンプ間隔
- 入力値は、「
9999y 99m 99d 99h 99m 99s 999999us」と同等の値を超えることはできません (SQLSTATE=42604 の sqlcode SQL0105N)。ミリ秒とマイクロ秒の値は、評価される前に、単一のマイクロ秒値に結合されます。結果の値が 999999 マイクロ秒を超えると、秒に変換されます。例えば、「88 ms 5000000 us」は 5088000 マイクロ秒に変換されます。この値は 999999 マイクロ秒を超えているため、5.088000 秒に変換されます。99 を超える秒の値は分に変換されます。99 を超える分の値は時間に変換されます。99 を超える時間の値は日に変換されます。99 を超える日の値は 30 日からなる月に変換されます。99 を超える月の値は年に変換されます。
| キーワード | 以下の間隔を指定した場合に許可される最大値... | ||
|---|---|---|---|
| 時間間隔 | 日付間隔 | タイム・スタンプ間隔 | |
| year、years、yrs、yr、y | (許可されません) | 9999 | 9999 |
| month、months、mons、mon | (許可されません) | 119999 | 119999 |
| day、days、d | (許可されません) | 3599999 | 3599999 |
| hour、hours、hrs、hr、h | 99 | (許可されません) | 86399999 |
| minute、minutes、mins、min、m | 5999 | (許可されません) | 2147483647 |
| second、seconds、secs、sec、s | 359999 | (許可されません) | 2147483647 |
| millisecond、milliseconds、ms | (許可されません) | (許可されません) | 2147483647 |
| microsecond、microseconds、us | (許可されません) | (許可されません) | 2147483647 |
結果
結果のデータ・タイプは、入力する間隔のタイプによって異なります。入力値に応じて以下のようになります。
- 入力値が日付間隔を表す場合、結果は DECIMAL(8,0) 値の日付期間になります。
- 入力値が時間間隔を表す場合、結果は DECIMAL(6,0) 値の時刻期間になります。
- 入力値がタイム・スタンプ間隔を表す場合、結果は DECIMAL 値のタイム・スタンプ期間になります。この値の精度は、ミリ秒とマイクロ秒の値を単一のマイクロ秒の値に結合してから、999999 を超えるマイクロ秒を秒に変換した後、残りのマイクロ秒の数がゼロかどうかによって異なります。
- ゼロの場合、結果は DECIMAL(14,0) です
- ゼロでない場合、結果は DECIMAL(20,6) です
例
- 次のステートメントは、DECIMAL(8,0) 値 40203 を返します。
interval('4years 2months 3days') - 次のステートメントは、DECIMAL(6,0) 値 -122030 を返します。
interval('-12 hours -20 minutes -30 seconds') - 次のステートメントは、DECIMAL(20,6) 値 40801092630.007055 を返します。
interval('4 years 9 hour 26min 30 seconds 7 ms 55us 8months 1d') - 次のステートメントは、DECIMAL(14,0) 値 22035 を返します。
ミリ秒 (1500) とマイクロ秒 (3500000) の値は、評価される前に単一のマイクロ秒値 (5000000) に結合されます。結果の値が 999999 マイクロ秒を超えるため、値は 5 秒に変換され、指定されている 30 秒に追加され、合計で 35 秒になります。interval('2 hours 20 minutes 30 seconds 1500 ms 3500000 us') - 次のステートメントは DECIMAL(8,0) 値 90714 を返します。これは、9 年 7 カ月 14 日に相当します。
日数が 99 を超えるため、104 日は 3 カ月 (1 月は 30 日) と残りの 14 日に変換されます。指定されている 100 カ月にこの 3 カ月が追加されるため、合計で 103 月になります。月数が 99 を超えるため、103 月は 8 年 (1 年は 12 カ月) と残りの 7 カ月に変換されます。指定されている 1 年にこの 8 年が追加されるため、合計で 9 年になります。interval('1 years 100 months 104 days') - 次のステートメントは、DECIMAL(6,0) 値 230120 を返します。これは、23 時間 1 分 20 秒に相当します。
分数が 99 を超えるため、181 分は 3 時間 (1 時間は 60 分) と残りの 1 分に変換されます。指定されている 20 時間にこの 3 時間が追加されるため、合計で 23 時間になります。interval('20 hours 181 minutes 20 seconds')
