Hitachi

ノンストップデータベース HiRDB Version 10 SQLリファレンス


2.12.1 時刻演算の形式と規則

〈この項の構成〉

(1) 機能

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進数表現した定数

乗算,除算

指定できません。

  • 整数データ(INTEGER,SMALLINT)

単項演算

時刻データ,及びラベル付き間隔には,指定できません。

(3) ラベル付き間隔

ラベル付き間隔は,時刻演算をする場合に,数値とそれに続く間隔キーワードで特定の時間単位を表します。ラベル付き間隔は,時刻データに対する時間隔データの加減算の第2演算項にだけ指定できます。

(4) 形式

 (値式){HOUR〔S〕|MINUTE〔S〕|SECOND〔S〕}

(5) 説明

  1. 値式に指定できるものを次に示します。

    • 整数定数

    • 列指定

    • コンポネント指定

    • SQL変数,又はSQLパラメタ

    • 四則演算

    • 集合関数

    • スカラ関数

    • CASE式

    • CAST指定

    • 関数呼出し

    • スカラ副問合せ

  2. 値式のデータ型は,整数(SMALLINT,INTEGER)にしてください。

  3. HOUR〔S〕,MINUTE〔S〕,SECOND〔S〕は,それぞれ時間,分,秒の単位を表し,語尾のSは指定してもしなくてもかまいません。指定例を次に示します。

    (例)

    1時間:1 HOUR

    23分:23 MINUTES

    100秒:100 SECONDS

  4. 値式に指定できる値の範囲を次に示します。

    HOUR〔S〕:−23〜23

    MINUTE〔S〕:−1439〜1439

    SECOND〔S〕:−86399〜86399

(6) 時刻演算の形式と結果のデータ型

時刻演算の形式と結果のデータ型の関係を次の表に示します。

表2‒20 時刻演算の形式と結果のデータ型の関係

演算の形式

結果のデータ型

時刻データ − 時刻データ

時間隔データ型

時刻データ{+|−}{時間隔データ|ラベル付き間隔}

時刻データ型

時間隔データ + 時刻データ

時刻データ型

時間隔データ{+|−}時間隔データ

時間隔データ型

時間隔データ{*|/}整数データ

時間隔データ型

時刻データ,又は時間隔データとの日付演算には,埋込み変数,標識変数,及び?パラメタは指定できません。

(7) 時刻演算の規則

時刻演算をする場合は,次に示す規則,及び「値式,値指定,及び項目指定」の共通規則に従います。

(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) 時刻データと時間隔データとを加減算する場合の規則

  1. 結果のデータ型は,時刻データ型になります。

  2. 演算の結果の範囲は,0時0分0秒〜23時59分59秒の間にしてください。

  3. 時間隔データ(ラベル付き間隔以外)の場合,時,分,秒の順に演算します。

  4. うるう秒を含む時刻データの場合,演算結果は次のようになります。

    • 秒が60秒以上の場合,演算する前に59秒に修正されます。

      (例)

      ’12:34:60’ + 1 MINUTEの演算結果は’12:35:59’

      ’12:34:60’ + 1 SECONDの演算結果は’12:35:00’

    • 演算結果には,うるう秒を含みません。

(9) 時間隔データ同士の加減算及び時間隔データの整数データによる乗除算の場合の規則

  1. 結果のデータ型は,時間隔データ型になります。

  2. 演算結果の範囲は,−99時間59分59秒間〜99時間59分59秒間にしてください。

  3. 分,秒が60を超える場合は,それぞれ時,分にけた上げをします。

  4. 除算は,時,分,秒を秒に通算した形に変換し,結果の小数点以下は切り捨てられます。

(10) 留意事項

次に示す時刻演算の規則で,オーバフローエラー抑止が設定されている場合は,エラーになりません。

なお,オーバフローエラー抑止が設定されている場合の演算結果については,「オーバフローエラー抑止が設定されている場合の演算結果」を参照してください。