2.11.1 日付演算の形式と規則
- 〈この項の構成〉
(1) 機能
SQL中に日付演算を指定すれば,日付,又は日間隔データの演算を使用した検索・更新ができます。
日付同士の減算,日付の日間隔の加減算,日間隔同士の加減算,及び日間隔に対する整数の乗除算ができます。
(2) 演算できるデータ
日付データ,又は日間隔データと日付演算ができる値を次の表に示します。
演算の種類 |
日付演算できる値 |
|
---|---|---|
日付データ |
日間隔データ |
|
加算 |
|
|
減算 |
|
|
乗算,除算 |
指定できません。 |
|
単項演算 |
日付データ,及びラベル付き間隔には,指定できません。 |
(3) ラベル付き間隔
ラベル付き間隔は,日付演算をする場合に,数値とそれに続く間隔キーワードで特定の時間単位を表します。ラベル付き間隔は,日付データに対する日間隔データの加減算の第2演算項にだけ指定できます。
(5) 説明
-
値式に指定できるものを次に示します。
-
整数定数
-
列指定
-
コンポネント指定
-
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) 日付演算の形式と結果のデータ型
日付演算の形式と結果のデータ型の関係を次の表に示します。
演算の形式 |
結果のデータ型 |
---|---|
日付データ − 日付データ |
日間隔データ型 |
日付データ{+|−}{日間隔データ|ラベル付き間隔} |
日付データ型 |
日間隔データ + 日付データ |
日付データ型 |
日間隔データ{+|−}日間隔データ |
日間隔データ型 |
日間隔データ{*|/}整数データ |
日間隔データ型 |
- 注
-
日付データ,又は日間隔データとの日付演算には,埋込み変数,標識変数,及び?パラメタは指定できません。
(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) 日付データと日間隔データとを加減算する場合の規則
-
結果のデータ型は,日付データ型になります。
-
演算の結果の範囲は,0001年01月01日〜9999年12月31日の間にしてください。
-
日間隔データ(ラベル付き間隔でない)の場合,年,月,日の順に演算します。
-
年,月の演算の結果が,存在しない日付(小の月の31日,及びうるう年以外の年の2月29日)になった場合の結果は,その月の最終日に修正※されます。存在しない日付が発生し,日付が修正された場合は,SQLWARNAに'W'が設定されます。
-
日の演算の結果がその月の最終日を超えたり,初日(1日)を下回った場合の結果は,それぞれ年,月のけた上げ,けた下げをします。
- 注※
-
任意の月の最終日から数か月後が,必ずその月の最終日になるわけではありません。ある日付に任意の月数を加算した後,その結果の日付から同じ月数を引いても,必ず元の日付になるとは限らないので注意してください。
(例)
(9) 日間隔データ同士の加減算及び日間隔データの整数データによる乗除算の場合の規則
-
結果のデータ型は,日間隔データ型になります。
-
日数について,演算の結果が,00〜99の範囲外であれば,SQLWARNCに'W'が設定されます。また,この時の演算結果の日数には,00未満の場合は00が,99より大きい場合は99が設定されます。
-
除算の結果が小数点以下となる場合,小数点以下は切り捨てられます。
(10) 留意事項
次に示す日付演算の規則で,オーバフローエラー抑止が設定されている場合,エラーになりません。
-
日付データ型のオーバフロー
-
日間隔データ型のオーバフロー
-
ラベル付き間隔のオーバフロー
なお,オーバフローエラー抑止が設定されている場合の演算結果については,「オーバフローエラー抑止が設定されている場合の演算結果」を参照してください。