8.9.9 TIMESTAMPDIFF
開始日時と終了日時の差を返します。
- メモ
-
スカラ関数TIMESTAMPDIFFとスカラ関数DATEDIFFに機能差はありません。
- 〈この項の構成〉
(1) 指定形式
スカラ関数TIMESTAMPDIFF::=TIMESTAMPDIFF(日時単位,開始日時,終了日時) 日時単位::={YEAR|QUARTER|MONTH|WEEK|DAY|DAYOFYEAR|HOUR|MINUTE |SECOND|MILLISECOND|MICROSECOND|NANOSECOND|PICOSECOND} 開始日時::=値式 終了日時::=値式
(2) 指定形式の説明
- 日時単位:
-
開始日時と終了日時の差を求めるときの単位を指定します。次に示すどれかの値を指定してください。
-
YEAR
開始日時と終了日時の差を年単位で求める場合に指定します。
(例)
TIMESTAMPDIFF(YEAR,'2018-05-05','2020-07-10') → 2
TIMESTAMPDIFF(YEAR,'2020-05-05','2020-07-10') → 0
TIMESTAMPDIFF(YEAR,'2019-12-31 23:59:59','2020-01-01 00:00:00') → 1
-
QUARTER
開始日時と終了日時の差を四半期単位で求める場合に指定します。1月1日を基準に,3か月単位に分けた範囲で計算します。
・第1四半期:01月01日〜03月31日
・第2四半期:04月01日〜06月30日
・第3四半期:07月01日〜09月30日
・第4四半期:10月01日〜12月31日
(例)
TIMESTAMPDIFF(QUARTER,'2020-01-05','2020-07-10') → 2
TIMESTAMPDIFF(QUARTER,'2020-01-05','2020-03-10') → 0
TIMESTAMPDIFF(QUARTER,'2019-12-31 23:59:59','2020-01-01 00:00:00') → 1
-
MONTH
開始日時と終了日時の差を月単位で求める場合に指定します。
(例)
TIMESTAMPDIFF(MONTH,'2020-01-05','2020-07-10') → 6
TIMESTAMPDIFF(MONTH,'2020-06-05','2020-06-10') → 0
TIMESTAMPDIFF(MONTH,'2019-12-31 23:59:59','2020-01-01 00:00:00') → 1
-
WEEK
開始日時と終了日時の差を週単位で求める場合に指定します。週の最初を日曜日として計算します。
(例)
TIMESTAMPDIFF(WEEK,'2020-07-03','2020-07-06') → 1
2020年7月5日が日曜日で週が変わっているため,1が返ります。
TIMESTAMPDIFF(WEEK,'2019-12-30','2020-01-01') → 0
2019年12月30日が月曜日で週が変わっていないため,0が返ります。
-
DAY
開始日時と終了日時の差を日単位で求める場合に指定します。
(例)
TIMESTAMPDIFF(DAY,'2020-07-05','2020-07-10') → 5
TIMESTAMPDIFF(DAY,'2020-07-05 08:02:25','2020-07-05 17:55:18') → 0
TIMESTAMPDIFF(DAY,'2019-12-31 23:59:59','2020-01-01 00:00:00') → 1
-
DAYOFYEAR
開始日時と終了日時の差を通算日単位で求める場合に指定します。DAYを指定した場合と同じ結果が返ります。
(例)
TIMESTAMPDIFF(DAYOFYEAR,'2020-07-05','2020-07-10') → 5
TIMESTAMPDIFF(DAYOFYEAR,'2020-07-05 08:02:25','2020-07-05 17:55:18') → 0
TIMESTAMPDIFF(DAYOFYEAR,'2019-12-31 23:59:59','2020-01-01 00:00:00') → 1
-
HOUR
開始日時と終了日時の差を時単位で求める場合に指定します。
(例)
TIMESTAMPDIFF(HOUR,'2020-07-10 08:02:25','2020-07-10 11:37:55') → 3
TIMESTAMPDIFF(HOUR,'2020-07-10 08:02:25','2020-07-10 08:45:15') → 0
TIMESTAMPDIFF(HOUR,'2019-12-31 23:59:59','2020-01-01 00:00:00') → 1
-
MINUTE
開始日時と終了日時の差を分単位で求める場合に指定します。
(例)
TIMESTAMPDIFF(MINUTE,'2020-07-10 08:02:25','2020-07-10 08:07:25') → 5
TIMESTAMPDIFF(MINUTE,'2020-07-10 08:02:25','2020-07-10 08:02:32') → 0
TIMESTAMPDIFF(MINUTE,'2019-12-31 23:59:59','2020-01-01 00:00:00') → 1
-
SECOND
開始日時と終了日時の差を秒単位で求める場合に指定します。
(例)
TIMESTAMPDIFF(SECOND,'2020-07-10 08:02:25','2020-07-10 08:02:33') → 8
TIMESTAMPDIFF(SECOND,'2019-12-31 23:59:59','2020-01-01 00:00:00') → 1
-
MILLISECOND
開始日時と終了日時の差をミリ秒(1/1,000秒)単位で求める場合に指定します。
(例)
TIMESTAMPDIFF(MILLISECOND,'08:02:25.000','08:02:25.003') → 3
TIMESTAMPDIFF(MILLISECOND,'08:02:24.000','08:02:25.001') → 1001
TIMESTAMPDIFF(MILLISECOND,'08:02:25.000000','08:02:25.003111') → 3
-
MICROSECOND
開始日時と終了日時の差をマイクロ秒(1/1,000,000秒)単位で求める場合に指定します。
(例)
TIMESTAMPDIFF(MICROSECOND,'08:02:25.000000','08:02:25.000012') → 12
-
NANOSECOND
開始日時と終了日時の差をナノ秒(1/1,000,000,000秒)単位で求める場合に指定します。
(例)
TIMESTAMPDIFF(NANOSECOND,'08:02:25.000000000','08:02:25.000000123') → 123
-
PICOSECOND
開始日時と終了日時の差をピコ秒(1/1,000,000,000,000秒)単位で求める場合に指定します。
(例)
TIMESTAMPDIFF(PICOSECOND,'08:02:25.000000000000','08:02:25.000000000003') → 3
-
- 開始日時:
-
開始日時を指定します。
指定規則を次に示します。
-
開始日時は,値式の形式で指定します。値式については,「7.21 値式」を参照してください。
-
開始日時のデータ型は,DATE型,TIME型,TIMESTAMP型,CHAR型,またはVARCHAR型のどれかにしてください。ただし,CHAR型またはVARCHAR型の場合は,既定の入力表現の形式に従っている文字列定数だけを指定できます。既定の入力表現については,「6.3.3 既定の文字列表現」を参照してください。
-
開始日時には,?パラメタを単独で指定できません。
-
- 終了日時:
-
終了日時を指定します。
指定規則を次に示します。
-
終了日時は,値式の形式で指定します。値式については,「7.21 値式」を参照してください。
-
終了日時のデータ型は,DATE型,TIME型,TIMESTAMP型,CHAR型,またはVARCHAR型のどれかにしてください。ただし,CHAR型またはVARCHAR型の場合は,既定の入力表現の形式に従っている文字列定数だけを指定できます。既定の入力表現については,「6.3.3 既定の文字列表現」を参照してください。
-
終了日時には,?パラメタを単独で指定できません。
-
(3) 規則
-
実行結果には,終了日時から開始日時を日時単位で減算した値を返します。終了日時が開始日時よりも前の日時の場合は,負の値を返します。
-
開始日時または終了日時に指定した日時データの欠落している要素の値には,既定値を設定して差が求められます。時刻要素が欠落している日付データの時刻要素には,00:00:00が仮定されます。小数秒部分の桁数が不足している場合は,不足しているすべての桁に0が仮定されます。
例えば,開始日時のデータ型がDATE型で,終了日時のデータ型がTIMESTAMP型のように,片方の日時データに時,分,秒の要素がない場合,時,分,秒には00:00:00が仮定されます。小数秒部分の桁数が不足している場合は,不足しているすべての桁に0が仮定されます。
(例)TIMESTAMPDIFF(SECOND,'2020-07-10','2020-07-10 00:00:07') → 7
上記の例の場合,開始日時には'2020-07-10 00:00:00'が仮定されます。
-
開始日時にDATE型,TIMESTAMP型,日付を表す既定の入力表現,または時刻印を表す既定の入力表現を指定した場合,終了日時にもDATE型,TIMESTAMP型,日付を表す既定の入力表現,または時刻印を表す既定の入力表現を指定してください。
-
開始日時にTIME型,または時刻を表す既定の入力表現を指定した場合,終了日時にもTIME型,または時刻を表す既定の入力表現を指定してください。
-
開始日時および終了日時に,TIME型または時刻を表す既定の入力表現を指定し,かつ日時単位にYEAR,QUARTER,MONTH,WEEK,DAY,またはDAYOFYEARを指定した場合,実行結果の値は0になります。
-
実行結果のデータ型はINTEGER型になります。実行結果の値がINTEGER型で表せる範囲を超えた場合,エラーになります。INTEGER型で表せる範囲については,「6.2.1 データ型の種類」の「(1) 数データ」を参照してください。
-
実行結果の値は,非ナル値制約なし(ナル値を許す)となります。
-
開始日時または終了日時がナル値の場合,実行結果はナル値になります。
-
スカラ関数TIMESTAMPDIFFの実行結果の値が1になる例を次に示します。この例では,開始日時と終了日時の差は1秒となっています。
日時単位の指定
開始日時の指定
終了日時の指定
実行結果
YEAR
'2011-12-31 23:59:59'
'2012-01-01 00:00:00'
1
QUARTER
'2011-12-31 23:59:59'
'2012-01-01 00:00:00'
1
MONTH
'2011-12-31 23:59:59'
'2012-01-01 00:00:00'
1
WEEK
'2011-12-31 23:59:59'
'2012-01-01 00:00:00'
1※
DAY
'2011-12-31 23:59:59'
'2012-01-01 00:00:00'
1
DAYOFYEAR
'2011-12-31 23:59:59'
'2012-01-01 00:00:00'
1
HOUR
'2011-12-31 23:59:59'
'2012-01-01 00:00:00'
1
MINUTE
'2011-12-31 23:59:59'
'2012-01-01 00:00:00'
1
SECOND
'2011-12-31 23:59:59'
'2012-01-01 00:00:00'
1
- 注※
-
2011年12月31日は土曜日で,2012年1月1日は日曜日のため,実行結果の値は1になります。開始日時と終了日時に指定した年が異なる場合であっても,開始日時と終了日時の両方が同じ週の場合,実行結果の値は0になります。
(4) 例題
- 例題
-
表T1のC1列とC2列の日時データの差を,日単位で求めます。
SELECT TIMESTAMPDIFF(DAY,"C1","C2") FROM "T1"