スケーラブルデータベースサーバ HiRDB Version 8 SQLリファレンス

[目次][索引][前へ][次へ]

2.11 日付演算

<この節の構成>
(1) 機能
(2) 演算できるデータ
(3) ラベル付き間隔
(4) 形式
(5) 説明
(6) 日付演算の形式と結果のデータ型
(7) 日付演算の規則
(8) 日付データと日間隔データとを加減算する場合の規則
(9) 日間隔データ同士の加減算及び日間隔データの整数データによる乗除算の場合の規則
(10) 留意事項

(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) 日付演算の規則

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

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

日付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) 留意事項

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

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