8.9.8 TIMESTAMPADD
対象データに指定した日時に,日時単位に指定した単位で日時を加算します。
- 〈この項の構成〉
(1) 指定形式
スカラ関数TIMESTAMPADD::=TIMESTAMPADD(日時単位,加算値,対象データ) 日時単位::={YEAR|QUARTER|MONTH|WEEK|DAY|DAYOFYEAR|HOUR|MINUTE |SECOND|MILLISECOND|MICROSECOND|NANOSECOND|PICOSECOND} 加算値::=値式 対象データ::=値式
(2) 指定形式の説明
- 日時単位:
-
対象データに加算する日時の単位を指定します。
日時単位に指定できる単位と,加算値に指定できる数データの値の範囲を次の表に示します。
表8‒30 日時単位に指定できる単位と,加算値に指定できる数データの値の範囲 日時単位の指定
説明
加算値に指定できる数データの値の範囲
YEAR
年
-9,998~9,998
QUARTER
四半期
1QUARTERは,3MONTH(3か月)として計算されます。
-39,995~39,995
MONTH
月
-119,987~119,987
WEEK
週
1WEEKは,7DAY(7日)として計算されます。
-521,722~521,722
DAY
日
-3,652,058~3,652,058
DAYOFYEAR
通算日
DAYを指定したときと同じ結果が返ります。
-3,652,058~3,652,058
HOUR
時
-87,649,415~87,649,415
MINUTE
分
-5,258,964,959~5,258,964,959
SECOND
秒
-315,537,897,599~315,537,897,599
MILLISECOND
ミリ秒(1/1,000秒)
仮定される小数秒精度は3です。
-315,537,897,599,999~315,537,897,599,999
MICROSECOND
マイクロ秒(1/1,000,000秒)
仮定される小数秒精度は6です。
-315,537,897,599,999,999~315,537,897,599,999,999
NANOSECOND
ナノ秒(1/1,000,000,000秒)
仮定される小数秒精度は9です。
-9,223,372,036,854,775,807~9,223,372,036,854,775,807
PICOSECOND
ピコ秒(1/1,000,000,000,000秒)
仮定される小数秒精度は12です。
- 加算値:
-
対象データの日時に加算する値を指定します。
指定規則を次に示します。
-
加算値は,値式の形式で指定します。値式については,「7.21 値式」を参照してください。
-
加算値のデータ型は,INTEGER型,BIGINT型,またはSMALLINT型のどれかにしてください。
-
対象データの日時を減算したい場合は,加算値に負の値を指定します。
(例)
TIMESTAMPADD(DAY,-1,DATE'2020-06-20') → DATE'2020-06-19'
-
加算値に指定できる数データの値の範囲については,「表8‒30 日時単位に指定できる単位と,加算値に指定できる数データの値の範囲」を参照してください。
-
加算値に?パラメタを単独で指定した場合,?パラメタに仮定されるデータ型はINTEGER型になります。
-
- 対象データ:
-
日時を加算する対象データを指定します。
指定規則を次に示します。
-
対象データは,値式の形式で指定します。値式については,「7.21 値式」を参照してください。
-
対象データには,?パラメタを単独で指定できません。
-
対象データのデータ型は,DATE型,TIME型,TIMESTAMP型,CHAR型,またはVARCHAR型のどれかにしてください。ただし,CHAR型またはVARCHAR型の場合は,既定の入力表現の形式に従っている文字列定数だけを指定できます。既定の入力表現については,「6.3.3 既定の文字列表現」を参照してください。
-
日時単位と対象データの指定可能な組み合わせを次の表に示します。
表8‒31 日時単位と対象データの指定可能な組み合わせ 日時単位の指定
指定可能な対象データのデータ型
DATE型または日付を表す既定の入力表現
TIME型または時刻を表す既定の入力表現
TIMESTAMP型または時刻印を表す既定の入力表現
YEAR
〇
×
〇
QUARTER
〇
×
〇
MONTH
〇
×
〇
WEEK
〇
×
〇
DAY
〇
×
〇
DAYOFYEAR
〇
×
〇
HOUR
×
〇
〇
MINUTE
×
〇
〇
SECOND
×
〇
〇
MILLISECOND
×
〇
〇
MICROSECOND
×
〇
〇
NANOSECOND
×
〇
〇
PICOSECOND
×
〇
〇
- (凡例)
-
〇:指定できます。
×:指定できません。
-
スカラ関数TIMESTAMPADDの実行結果の例を次に示します。
- (例1)
-
TIMESTAMPADD(DAY,2,DATE'2020-03-01') → DATE'2020-03-03'
- (例2)
-
TIMESTAMPADD(MILLISECOND,1,TIMESTAMP'2019-12-31 23:59:59.999') → TIMESTAMP'2020-01-01 00:00:00.000'
(3) 規則
-
実行結果には,指定した日時単位で加算値を,対象データに加算した値が返されます。
-
実行結果のデータ型は次のようになります。
-
対象データがDATE型または日付を表す既定の入力表現(CHAR型,VARCHAR型)の場合,実行結果のデータ型はDATE型になります。
-
対象データがTIME型または時刻を表す既定の入力表現(CHAR型,VARCHAR型)の場合,実行結果のデータ型はTIME型になります。
-
対象データがTIMESTAMP型または時刻印を表す既定の入力表現(CHAR型,VARCHAR型)の場合,実行結果のデータ型はTIMESTAMP型になります。
-
-
実行結果の値は,非ナル値制約なし(ナル値を許す)となります。
-
加算値または対象データがナル値の場合,実行結果はナル値になります。
-
実行結果の値が,DATE型,TIME型,またはTIMESTAMP型の値の範囲に収まらない場合,エラーになります。DATE型,TIME型,およびTIMESTAMP型の値の範囲については,「6.2.1 データ型の種類」の「(3) 日時データ」を参照してください。
-
年,月を加減算した結果が,存在しない日付(小の月の31日,またはうるう年以外の2月29日)になった場合,その月の最終日に補正されます。
(例)
TIMESTAMPADD(YEAR,1,DATE'2020-02-29') → DATE'2021-02-28'
2021年はうるう年ではないため,実行結果が上記のように補正されます。
-
日を加減算した結果が,その月の最終日を超えたり,または初日(1日)より前になったりした場合,年,月の桁上げまたは桁下げが行われます。
(例)
TIMESTAMPADD(DAY,1,DATE'2020-12-31') → DATE'2021-01-01' TIMESTAMPADD(DAY,-1,DATE'2020-07-01') → DATE'2020-06-30'
-
対象データの小数秒精度と,加算する時刻または時刻印の小数秒精度が異なる場合,精度が高い方の小数秒精度に合わせます(精度が低い方に0を補います)。例えば,対象データの小数秒精度が0で,日時単位がMILLISECONDの場合,対象データの小数秒精度を3に拡張したあとに加算値を加算します。
-
時を加減算した結果が,23時59分59.999999999999秒を超えたり,00時00分00.000000000000秒より前になったりした場合,日の桁上げまたは桁下げが行われます。
(例)
TIMESTAMPADD(SECOND,1,TIMESTAMP'2020-02-01 23:59:59') → TIMESTAMP'2020-02-02 00:00:00' TIMESTAMPADD(SECOND,-1,TIMESTAMP'2020-02-02 00:00:00') → TIMESTAMP'2020-02-01 23:59:59'
-
スカラ関数TIMESTAMPADDは,次の表に示す日時演算に変換されたあとに実行されます。
表8‒32 スカラ関数TIMESTAMPADDから日時演算への変換規則 TIMESTAMPADDの指定形式
変換後の日時演算
TIMESTAMPADD(YEAR,加算値,対象データ)
対象データ + (加算値)YEAR
TIMESTAMPADD(QUARTER,加算値,対象データ)
対象データ + ((加算値)*3)MONTH
TIMESTAMPADD(MONTH,加算値,対象データ)
対象データ + (加算値)MONTH
TIMESTAMPADD(WEEK,加算値,対象データ)
対象データ + ((加算値)*7)DAY
TIMESTAMPADD(DAY,加算値,対象データ)
対象データ + (加算値)DAY
TIMESTAMPADD(DAYOFYEAR,加算値,対象データ)
対象データ + (加算値)DAY
TIMESTAMPADD(HOUR,加算値,対象データ)
対象データ + (加算値)HOUR
TIMESTAMPADD(MINUTE,加算値,対象データ)
対象データ + (加算値)MINUTE
TIMESTAMPADD(SECOND,加算値,対象データ)
対象データ + (加算値)SECOND
TIMESTAMPADD(MILLISECOND,加算値,対象データ)
対象データ + (加算値)MILLISECOND
TIMESTAMPADD(MICROSECOND,加算値,対象データ)
対象データ + (加算値)MICROSECOND
TIMESTAMPADD(NANOSECOND,加算値,対象データ)
対象データ + (加算値)NANOSECOND
TIMESTAMPADD(PICOSECOND,加算値,対象データ)
対象データ + (加算値)PICOSECOND
(4) 例題
- 例題
-
表T1のC2列の対象データ(日付)に,5日を加算した日付を求めます。
SELECT "C1",TIMESTAMPADD(DAY,5,"C2") FROM "T1"