スケーラブルデータベースサーバ HiRDB Version 8 SQLリファレンス
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進数表現した定数
|
乗算,除算 |
指定できません。 |
|
単項演算 |
日付データ,及びラベル付き間隔には,指定できません。 |
(3) ラベル付き間隔
ラベル付き間隔は,日付演算をする場合に,数値とそれに続く間隔キーワードで特定の時間単位を表します。ラベル付き間隔は,日付データに対する日間隔データの加減算の第2演算項にだけ指定できます。
- 値式に指定できるものを次に示します。
- 整数定数
- 列指定
- コンポネント指定
- SQL変数,又はSQLパラメタ
- 四則演算
- 集合関数
- スカラ関数
- CASE式
- CAST指定
- 関数呼出し
- スカラ副問合せ
- 値式のデータ型は,整数(SMALLINT,INTEGER)にしてください。
- YEAR〔S〕,MONTH〔S〕,DAY〔S〕は,それぞれ年,月,日の単位を表し,語尾のSは指定しなくてもかまいません。指定例を次に示します。
(例)
1か年:1 YEAR
11か月:11 MONTHS
100か日:100 DAYS
- 値式に指定できる値の範囲を次に示します。
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
- 日付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) 日付データと日間隔データとを加減算する場合の規則
- 結果のデータ型は,日付データ型になります。
- 演算の結果の範囲は,0001年01月01日〜9999年12月31日の間にしてください。
- 日間隔データ(ラベル付き間隔でない)の場合,年,月,日の順に演算します。
- 年,月の演算の結果が,存在しない日付(小の月の31日,及びうるう年以外の年の2月29日)になった場合の結果は,その月の最終日に修正※されます。存在しない日付が発生し,日付が修正された場合は,SQLWARNAに'W'が設定されます。
- 日の演算の結果がその月の最終日を超えたり,初日(1日)を下回った場合の結果は,それぞれ年,月のけた上げ,けた下げをします。
- 注※
- 任意の月の最終日から数か月後が,必ずその月の最終日になるわけではありません。ある日付に任意の月数を加算した後,その結果の日付から同じ月数を引いても,必ず元の日付になるとは限らないので注意してください。
- (例)
(9) 日間隔データ同士の加減算及び日間隔データの整数データによる乗除算の場合の規則
- 結果のデータ型は,日間隔データ型になります。
- 日数について,演算の結果が,00〜99の範囲外であれば,SQLWARNCに'W'が設定されます。また,この時の演算結果の日数には,00未満の場合は00が,99より大きい場合は99が設定されます。
- 除算の結果が小数点以下となる場合,小数点以下は切り捨てられます。
次に示す日付演算の規則で,オーバフローエラー抑止が設定されている場合,エラーになりません。
- 日付データ型のオーバフロー
- 日間隔データ型のオーバフロー
- ラベル付き間隔のオーバフロー
なお,オーバフローエラー抑止が設定されている場合の演算結果については,「2.18 オーバフローエラー抑止が設定されている場合の演算結果」を参照してください。
All Rights Reserved. Copyright (C) 2006, 2016, Hitachi, Ltd.