機能
時間隔値式は、時間隔値を指定します。
記述形式
参照項番
数値関数 → “2.5.2 数値関数”
日時値式 → “2.11.3 日時値式”
日時値関数 → “2.5.4 日時値関数”
数字 → “2.1.1 文字”
値式一次子 → “2.11 値式”
一般規則
演算結果データ型を以下に示します。
パターン | 結果データ型 |
---|---|
時間隔値式 ± 時間隔項 | 時間隔型 演算する時間隔の最上位日時フィールド~最下位日時フィールドを持つ(注) |
日時値式 - 日時項 | 時間隔型 時間隔修飾子に従う |
時間隔項 * (/) 因子 | 時間隔型 時間隔項側の日時フィールドを持つ(注) |
項 * 時間隔因子 | 時間隔型 時間隔因子側の日時フィールドを持つ(注) |
注) 演算結果の有効桁を失わないような時間隔先行フィールドを持つ
時間隔値式±時間隔項を行う場合、年月クラスと年月クラスどうし、または、日時クラスと日時クラスどうしの演算のみ可能です。年月クラスと日時クラスの演算は行えません。
値式一次子が動的パラメタ指定の場合は、値式一次子の直後に時間隔修飾子を指定することができます。
日時値式-日時項を行う場合、日時値式および日時項は比較可能であることが必要です。比較可能なデータ型は“表2.58 比較可能なデータ型”を参照してください。
時間隔演算に変数指定を使用する場合、CASTによるデータ型変換が必要です。
日時値式-日時項を行う場合、時間隔値式の結果は、時間隔修飾子で指定された開始フィールドから終了フィールドを持つ時間隔型に変換されます。このとき、時間隔修飾子で指定した終了フィールドよりも下位の日時フィールドは、切り捨てられます。
時間隔値式±時間隔項、時間隔項* (/)因子および項*時間隔因子を行う場合の時間隔値式の結果の時間隔先行フィールド精度を以下に示します。
演算 | 左辺 | 右辺 | 時間隔先行フィールド精度 |
---|---|---|---|
加減算 | 時間隔値式 | 時間隔項 | MIN(9,MAX(p)+1) |
乗算 | 時間隔項 | 因子 | MIN(9,p + 因子の精度 |
除算 | 時間隔項 | 因子 | MIN(9,p + 因子の位取り) |
p: 時間隔先行フィールド精度
(左辺、右辺をそれぞれ演算結果の日時フィールドを持つ時間隔に変換した後の時間隔先行フィールド精度(1≦n≦9))
時間隔値式±時間隔項(年月型)の演算結果の時間隔型を以下に示します。
| 時間隔項 | |||
---|---|---|---|---|
YEAR(P2) | YEAR(p2) TO MONTH | MONTH(p2) | ||
時間隔値式 | YEAR(p1) | YEAR(p) | YEAR(p) TO MONTH | YEAR(p) TO MONTH |
YEAR(p1) TO MONTH | YEAR(p) TO MONTH | YEAR(p) TO MONTH | YEAR(p) TO MONTH | |
MONTH(p1) | YEAR(p) TO MONTH | YEAR(p) TO MONTH | MONTH(p) |
p、p1、p2: 時間隔先行フィールド精度
時間隔値式±時間隔項(日時型)の演算結果の時間隔型を以下に示します。
| 時間隔項 | ||||
---|---|---|---|---|---|
DAY(p2) TO E2 | HOUR(p2) TO E2 | MINUTE(p2) TO E2 | SECOND(p2) | ||
時間隔値式 | DAY(p1) TO E1 | DAY(p) TO E | DAY(p) TO E | DAY(p) TO E | DAY(p) TO SECOND |
HOUR(p1) TO E1 | DAY(p) TO E | HOUR(p) TO E | HOUR(p) TO E | HOUR(p) TO SECOND | |
MINUTE(p1) TO E1 | DAY(p) TO E | HOUR(p) TO E | MINUTE(p) TO E | MINUTE(p) TO SECOND | |
SECOND(p1) | DAY(p) TO SECOND | HOUR(p) TO SECOND | MINUTE(p) TO SECOND | SECOND(p) |
p、p1、p2 : 時間隔先行フィールド精度
E、E1、E2 : 日時フィールド
なお、日時フィールドには以下の大小関係があります。
DAY > HOUR > MINUTE > SECOND
例
MIN(DAY,MINUTE) = MINUTE
時間隔項*(/)因子および項*時間隔因子の演算結果の時間隔型を以下に示します。
| 因子または項 | ||||||
---|---|---|---|---|---|---|---|
SMALLINT | INTEGER | NUMERIC(p2,q2) | DECIMAL(p2,q2) | REAL | DOUBLE | ||
時間隔項または時間隔因子 | YEAR(p1) TO E | YEAR(p) TO E 乗算 p: MIN(9,p1+p2) | YEAR(9) TO E | ||||
MONTH(p1) | MONTH(p) 乗算 p: MIN(9,p1+p2) | MONTH(9) | |||||
DAY(p1) TO E | DAY(p) TO E 乗算 p: MIN(9,p1+p2) | DAY(9) TO E | |||||
HOUR(p1) TO E | HOUR(p) TO E 乗算 p: MIN(9,p1+p2) | HOUR(9) TO E | |||||
MINUTE(p1) TO E | MINUTE(p) TO E 乗算 p: MIN(9,p1+p2) | MINUTE(9) TO E | |||||
SECOND(p1) | SECOND(p) 乗算 p: MIN(9,p1+p2) | SECOND(9) |
p、p1: 時間隔先行フィールド精度
p2 : 精度
q2 : 位取り
E : 日時フィールド
注1) 因子がSMALLINTの場合、p2=5、q2=0を表します。
注2) 因子がINTEGERの場合、p2=10、q2=0を表します。
時間隔値式の各オペランドに動的パラメタ指定が指定された場合のDESCRIBE情報を以下に示します。
オペランド | DESCRIBE情報 | |
---|---|---|
時間隔値式 | 動的パラメタ指定に時間隔修飾子の指定あり | 時間隔型 |
動的パラメタ指定に時間隔修飾子の指定なし | 時間隔項のデータ型 | |
時間隔項 | 動的パラメタ指定に時間隔修飾子の指定あり | 時間隔型 |
動的パラメタ指定に時間隔修飾子の指定なし | 時間隔値式のデータ型 | |
因子 | INTEGER | |
項 | INTEGER |
備考1.日時値式 - ? および ? - 日時項 の場合はエラーとなります。
備考2.? *(/) 因子 または 項 * ? の場合は数値式と仮定されます。
使用例
時間隔値式の演算1(時間隔定数間の減算の場合)
INTERVAL '20' YEAR - INTERVAL '13' MONTH →結果は、INTERVAL'18-11'YEAR(3) TO MONTHになります。
時間隔値式の演算2(時間隔定数と数定数の乗算の場合)
INTERVAL '4' MONTH * 2 →結果は、INTERVAL'8'MONTH(7)になります。
時間隔値式の演算3(時間隔型の列“記録”を時間隔値式として選択リストに指定した場合)
SELECT チーム名,記録 - MIN(記録) FROM 駅伝記録表 WHERE チーム名='GRP01' GROUP BY 区間 →結果は、チーム名='GRP01'の区間最高記録とのタイム差を検索します。