スケーラブルデータベースサーバ HiRDB Version 8 SQLリファレンス
SQL中に時刻演算を指定すれば,時刻,又は時間隔データの演算を使用した検索・更新ができます。
時刻同士の減算,時刻に対する時間隔の加減算,時間隔同士の加減算,及び時間隔に対する整数の乗除算ができます。
(2) 演算できるデータ
時刻データ,又は時間隔データと時刻演算ができる値を次の表に示します。
表2-19 時刻演算ができる値
演算の種類 |
時刻演算できる値 |
時刻データ |
時間隔データ |
加算 |
- 時間隔データ
(INTERVAL HOUR TO SECOND)
- 時間隔を10進数表現した定数
- ラベル付き間隔
(HOUR〔S〕,MINUTE〔S〕,SECOND〔S〕)
|
- 時刻データ(TIME)
- 時刻を既定の文字列表現で指定した定数
- 時間隔データ
(INTERVAL HOUR TO SECOND)
- 時間隔を10進数表現した定数
|
減算 |
- 時刻データ(TIME)
- 時刻を既定の文字列表現で指定した定数
- 時間隔データ
(INTERVAL HOUR TO SECOND)
- 時間隔を10進数表現した定数
- ラベル付き間隔
(HOUR〔S〕,MINUTE〔S〕,SECOND〔S〕)
|
- 時間隔データ
(INTERVAL HOUR TO SECOND)
- 時間隔を10進数表現した定数
|
乗算,除算 |
指定できません。 |
|
単項演算 |
時刻データ,及びラベル付き間隔には,指定できません。 |
ラベル付き間隔は,時刻演算をする場合に,数値とそれに続く間隔キーワードで特定の時間単位を表します。ラベル付き間隔は,時刻データに対する時間隔データの加減算の第2演算項にだけ指定できます。
- 値式に指定できるものを次に示します。
- 整数定数
- 列指定
- コンポネント指定
- SQL変数,又はSQLパラメタ
- 四則演算
- 集合関数
- スカラ関数
- CASE式
- CAST指定
- 関数呼出し
- スカラ副問合せ
- 値式のデータ型は,整数(SMALLINT,INTEGER)にしてください。
- HOUR〔S〕,MINUTE〔S〕,SECOND〔S〕は,それぞれ時間,分,秒の単位を表し,語尾のSは指定してもしなくてもかまいません。指定例を次に示します。
(例)
1時間:1 HOUR
23分:23 MINUTES
100秒:100 SECONDS
- 値式に指定できる値の範囲を次に示します。
HOUR〔S〕:−23〜23
MINUTE〔S〕:−1439〜1439
SECOND〔S〕:−86399〜86399
(6) 時刻演算の形式と結果のデータ型
時刻演算の形式と結果のデータ型の関係を次の表に示します。
表2-20 時刻演算の形式と結果のデータ型の関係
演算の形式 |
結果のデータ型 |
時刻データ − 時刻データ |
時間隔データ型 |
時刻データ{+|−}{時間隔データ|ラベル付き間隔} |
時刻データ型 |
時間隔データ + 時刻データ |
時刻データ型 |
時間隔データ{+|−}時間隔データ |
時間隔データ型 |
時間隔データ{*|/}整数データ |
時間隔データ型 |
- 注
- 時刻データ,又は時間隔データとの日付演算には,埋込み変数,標識変数,及び?パラメタは指定できません。
(7) 時刻演算の規則
時刻演算をする場合は,次に示す規則,及び「2.9 値式,値指定,及び項目指定」の共通規則に従います。
(a) 時刻データ同士を減算する場合の規則
- 結果のデータ型は,時,分,秒を表す時間隔データ型になります。
- 時刻1又は時刻2の秒が60秒以上の場合,演算する前に59秒に修正されます。
- 演算式を(時刻1−時刻2)としたときの結果は,次の規則に従い計算します。
- 時刻1≧時刻2の場合
- 結果=時刻1−時刻2
- 時刻1<時刻2の場合
- 結果=−(時刻2−時刻1)
- 時刻1の秒≧時刻2の秒の場合
- 結果の秒=時刻1の秒−時刻2の秒
- 時刻1の秒<時刻2の秒の場合
- 結果の秒=時刻1の秒−時刻2の秒+60
- 時刻2の分=時刻2の分+1
- 時刻1の分≧時刻2の分の場合
- 結果の分=時刻1の分−時刻2の分
- 時刻1の分<時刻2の分の場合
- 結果の分=時刻1の分−時刻2の分+60
- 時刻2の時=時刻2の時+1
- 結果の時=時刻1の時−時刻2の時
- (例)TIME('13:10:15')-TIME('11:50:59')の減算結果を求める場合
(b) 計算手順の説明
(8) 時刻データと時間隔データとを加減算する場合の規則
- 結果のデータ型は,時刻データ型になります。
- 演算の結果の範囲は,0時0分0秒〜23時59分59秒の間にしてください。
- 時間隔データ(ラベル付き間隔以外)の場合,時,分,秒の順に演算します。
- うるう秒を含む時刻データの場合,演算結果は次のようになります。
- 秒が60秒以上の場合,演算する前に59秒に修正されます。
(例)
'12:34:60' + 1 MINUTEの演算結果は'12:35:59'
'12:34:60' + 1 SECONDの演算結果は'12:35:00'
- 演算結果には,うるう秒を含みません。
(9) 時間隔データ同士の加減算及び時間隔データの整数データによる乗除算の場合の規則
- 結果のデータ型は,時間隔データ型になります。
- 演算結果の範囲は,−99時間59分59秒間〜99時間59分59秒間にしてください。
- 分,秒が60を超える場合は,それぞれ時,分にけた上げをします。
- 除算は,時,分,秒を秒に通算した形に変換し,結果の小数点以下は切り捨てられます。
次に示す時刻演算の規則で,オーバフローエラー抑止が設定されている場合は,エラーになりません。
- 時刻データ型のオーバフロー
- 時間隔データ型のオーバフロー
- ラベル付き間隔のオーバフロー
なお,オーバフローエラー抑止が設定されている場合の演算結果については,「2.18 オーバフローエラー抑止が設定されている場合の演算結果」を参照してください。
All Rights Reserved. Copyright (C) 2006, 2016, Hitachi, Ltd.