INTERVAL スカラー関数

INTERVAL 関数は、間隔の文字ストリング表現を 10 進数の期間に変換します。

スキーマは SYSIBM です。

構文

構文図を読む構文図をスキップする INTERVAL ( string-constant )
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 を超える月の値は年に変換されます。
表 1. 時間単位を表すキーワード
キーワード 以下の間隔を指定した場合に許可される最大値...
時間間隔 日付間隔 タイム・スタンプ間隔
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 を返します。
    interval('2 hours 20 minutes 30 seconds 1500 ms 3500000 us')
    ミリ秒 (1500) とマイクロ秒 (3500000) の値は、評価される前に単一のマイクロ秒値 (5000000) に結合されます。結果の値が 999999 マイクロ秒を超えるため、値は 5 秒に変換され、指定されている 30 秒に追加され、合計で 35 秒になります。
  • 次のステートメントは DECIMAL(8,0) 値 90714 を返します。これは、9 年 7 カ月 14 日に相当します。
    interval('1 years 100 months 104 days')
    日数が 99 を超えるため、104 日は 3 カ月 (1 月は 30 日) と残りの 14 日に変換されます。指定されている 100 カ月にこの 3 カ月が追加されるため、合計で 103 月になります。月数が 99 を超えるため、103 月は 8 年 (1 年は 12 カ月) と残りの 7 カ月に変換されます。指定されている 1 年にこの 8 年が追加されるため、合計で 9 年になります。
  • 次のステートメントは、DECIMAL(6,0) 値 230120 を返します。これは、23 時間 1 分 20 秒に相当します。
    interval('20 hours 181 minutes 20 seconds')
    分数が 99 を超えるため、181 分は 3 時間 (1 時間は 60 分) と残りの 1 分に変換されます。指定されている 20 時間にこの 3 時間が追加されるため、合計で 23 時間になります。