Hitachi

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


2.11.1 日付演算の形式と規則

〈この項の構成〉

(1) 機能

SQL中に日付演算を指定すれば,日付,又は日間隔データの演算を使用した検索・更新ができます。

日付同士の減算,日付の日間隔の加減算,日間隔同士の加減算,及び日間隔に対する整数の乗除算ができます。

(2) 演算できるデータ

日付データ,又は日間隔データと日付演算ができる値を次の表に示します。

表2‒17 日付演算できるデータ

演算の種類

日付演算できる値

日付データ

日間隔データ

加算

  • 日間隔データ

    (INTERVAL YEAR TO DAY)

  • 日間隔を10進数表現した定数

  • ラベル付き間隔

    (YEAR〔S〕,MONTH〔S〕,DAY〔S〕)

  • 日付データ(DATE)

  • 日付を既定の文字列表現で指定した定数

  • 日間隔データ

    (INTERVAL YEAR TO DAY)

  • 日間隔を10進数表現した定数

減算

  • 日付データ(DATE)

  • 日付を既定の文字列表現で指定した定数

  • 日間隔データ

    (INTERVAL YEAR TO DAY)

  • 日間隔を10進数表現した定数

  • ラベル付き間隔

    (YEAR〔S〕,MONTH〔S〕,DAY〔S〕)

  • 日間隔データ

    (INTERVAL YEAR TO DAY)

  • 日間隔を10進数表現した定数

乗算,除算

指定できません。

  • 整数データ(INTEGER,SMALLINT)

単項演算

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

(3) ラベル付き間隔

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

(4) 形式

 (値式){YEAR〔S〕|MONTH〔S〕|DAY〔S〕}

(5) 説明

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

    • 整数定数

    • 列指定

    • コンポネント指定

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

    • 四則演算

    • 集合関数

    • スカラ関数

    • CASE式

    • CAST指定

    • 関数呼出し

    • スカラ副問合せ

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

  3. YEAR〔S〕,MONTH〔S〕,DAY〔S〕は,それぞれ年,月,日の単位を表し,語尾のSは指定しなくてもかまいません。指定例を次に示します。

    (例)

    1か年:1 YEAR

    11か月:11 MONTHS

    100か日:100 DAYS

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

    YEAR〔S〕:−9998〜9998

    MONTH〔S〕:−199987〜119987

    DAY〔S〕:−3652058〜3652058

(6) 日付演算の形式と結果のデータ型

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

表2‒18 日付演算の形式と結果のデータ型の関係

演算の形式

結果のデータ型

日付データ − 日付データ

日間隔データ型

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

日付データ型

日間隔データ + 日付データ

日付データ型

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

日間隔データ型

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

日間隔データ型

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

(7) 日付演算の規則

日付演算をする場合は,次に示す規則,及び「値式,値指定,及び項目指定」の共通規則に従ってください。

(a) 日付データ同士を減算する場合の規則

  • 結果のデータ型は,年数,月数,及び日数を表す日間隔データ型になります。

  • 演算式を(日付1−日付2)としたときの結果は,次の規則に従い計算します。

日付1≧日付2の場合

結果=日付1−日付2

日付1<日付2の場合

結果=−(日付2−日付1)

日付1の日≧日付2の日の場合

結果の日=日付1の日−日付2の日

日付1の日<日付2の日の場合

結果の日=日付1の日−日付2の日+日付2の月の最終日

日付2の月=日付2の月+1

日付1の月≧日付2の月の場合

結果の月=日付1の月−日付2の月

日付1の月<日付2の月の場合

結果の月=日付1の月−日付2の月+12

日付2の年=日付2の年+1

結果の年=日付1の年−日付2の年

注※

減算結果は,日付2−日付1の結果に負符号を付けた値になります。

(例)

DATE('1995-10-15')-DATE('1989-12-16')の減算結果を求める場合

[図データ]

(b) 計算手順の説明

[図データ]

(8) 日付データと日間隔データとを加減算する場合の規則

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

  2. 演算の結果の範囲は,0001年01月01日〜9999年12月31日の間にしてください。

  3. 日間隔データ(ラベル付き間隔でない)の場合,年,月,日の順に演算します。

  4. 年,月の演算の結果が,存在しない日付(小の月の31日,及びうるう年以外の年の2月29日)になった場合の結果は,その月の最終日に修正されます。存在しない日付が発生し,日付が修正された場合は,SQLWARNAに'W'が設定されます。

  5. 日の演算の結果がその月の最終日を超えたり,初日(1日)を下回った場合の結果は,それぞれ年,月のけた上げ,けた下げをします。

注※

任意の月の最終日から数か月後が,必ずその月の最終日になるわけではありません。ある日付に任意の月数を加算した後,その結果の日付から同じ月数を引いても,必ず元の日付になるとは限らないので注意してください。

(例)

[図データ]

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

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

  2. 日数について,演算の結果が,00〜99の範囲外であれば,SQLWARNCに'W'が設定されます。また,この時の演算結果の日数には,00未満の場合は00が,99より大きい場合は99が設定されます。

  3. 除算の結果が小数点以下となる場合,小数点以下は切り捨てられます。

(10) 留意事項

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

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