MySQL のよく使う日付関数 2 - DATE_ADD()・DATE_SUB()

ここでは MySQL のよく使う集計関数の DATE_ADD()、DATE_SUB() についてご説明します。

MySQL の 日付関数 DATE_ADD() の使い方

MySQL の DATE_ADD() は日時の値と、追加するインターバルの数値と単位を受け取り、日時の値に、数値を指定された単位で足した日時を返す日付関数です。

DATE_ADD(日時の値, INTERVAL 数値 単位)

単位に指定できる値と、その時に期待される数値のフォーマットは以下の通りです。

単位 数値のフォーマット
MICROSECOND MICROSECONDS
SECOND SECONDS
MINUTE MINUTES
HOUR HOURS
DAY DAYS
WEEK WEEKS
MONTH MONTHS
QUARTER QUARTERS
YEAR YEARS
SECOND_MICROSECOND 'SECONDS.MICROSECONDS'
MINUTE_MICROSECOND 'MINUTES:SECONDS.MICROSECONDS'
MINUTE_SECOND 'MINUTES:SECONDS'
HOUR_MICROSECOND 'HOURS:MINUTES:SECONDS.MICROSECONDS'
HOUR_SECOND 'HOURS:MINUTES:SECONDS'
HOUR_MINUTE 'HOURS:MINUTES'
DAY_MICROSECOND 'DAYS HOURS:MINUTES:SECONDS.MICROSECONDS'
DAY_SECOND 'DAYS HOURS:MINUTES:SECONDS'
DAY_MINUTE 'DAYS HOURS:MINUTES'
DAY_HOUR 'DAYS HOURS'
YEAR_MONTH 'YEARS-MONTHS'

単位が間違っていたり、数値が期待されたフォーマットに合っておらず、変換できない時はエラーになります。

マイナスの数値を指定することで、DATE_ADD() で数値を引くようにすることも可能です。


それでは、DATE_ADD() を使って、日時に数値を足してみましょう。

SET @date = '2022-12-31 23:59:59';

SELECT 	@date,
		DATE_ADD(@date, INTERVAL 1 SECOND) AS Case1,
		DATE_ADD(@date, INTERVAL 2 HOUR) AS Case2,
        DATE_ADD(@date, INTERVAL 3 DAY) AS Case3,
		DATE_ADD(@date, INTERVAL 4 YEAR) AS Case4,
		DATE_ADD(@date, INTERVAL '1 0:0:1' DAY_SECOND) AS Case5,
		DATE_ADD(@date, INTERVAL '1-2' YEAR_MONTH) AS Case6,
		DATE_ADD(@date, INTERVAL -1 DAY) AS Case7;

[実行結果]

MySQL のよく使う日付関数 2 - DATE_ADD()・DATE_SUB() 1

2022-12-31 23:59:59 に DATE_ADD() でいろんな単位を指定して数値を追加しています。

Caes 1 では INTERVAL 1 SECOND で 1 秒足していて、2023-01-01 00:00:00 を返しています。

Caes 2 では INTERVAL 2 HOUR で 2 時間足していて、2023-01-01 01:59:59 を返しています。

Caes 3 では INTERVAL 3 DAY で 三日足していて、2023-01-03 23:59:59 を返しています。

Caes 4 では INTERVAL 4 YEAR で 四年足していて、2026-12-31 23:59:59 を返しています。

Caes 5 では INTERVAL '1 0:0:1' DAY_SECOND で 1 日と 1 秒足していて、2023-01-02 00:00:00 を返しています。

Caes 6 では INTERVAL '1-2' YEAR_MONTH で 1 年と 2 ヶ月足していて、2024-02-29 23:59:59 を返しています。

Caes 7 では INTERVAL -1 DAY で 1 日を引いていて、2022-12-30 23:59:59 を返しています。


MySQL の 日付関数 DATE_SUB() の使い方

MySQL の DATE_SUB() は日時の値と、追加するインターバルの数値と単位を受け取り、日時の値に、数値を指定された単位で引いた日時を返す日付関数です。

構文や、指定できる単位と数値のフォーマットは DATE_ADD() と同じです。

DATE_SUB(日時の値, INTERVAL 数値 単位)

単位が間違っていたり、数値が期待されたフォーマットに合っておらず、変換できない時はエラーになります。

マイナスの数値を指定することで、DATE_SUB() で数値を足すようにすることも可能です。


それでは、DATE_SUB() を使って、日時から数値を引いてみましょう。

SET @date = '2023-01-01 00:00:00';

SELECT 	@date,
		DATE_SUB(@date, INTERVAL 1 SECOND) AS Case1,
		DATE_SUB(@date, INTERVAL 2 HOUR) AS Case2,
        DATE_SUB(@date, INTERVAL 3 DAY) AS Case3,
		DATE_SUB(@date, INTERVAL 4 YEAR) AS Case4,
		DATE_SUB(@date, INTERVAL '1 0:0:1' DAY_SECOND) AS Case5,
		DATE_SUB(@date, INTERVAL '1-2' YEAR_MONTH) AS Case6,
		DATE_SUB(@date, INTERVAL -1 DAY) AS Case7;

[実行結果]

MySQL のよく使う日付関数 2 - DATE_ADD()・DATE_SUB() 2

2023-01-01 00:00:00 に DATE_SUB() でいろんな単位を指定して数値を引いています。

Caes 1 では INTERVAL 1 SECOND で 1 秒引いていて、2022-12-31 23:59:59 を返しています。

Caes 2 では INTERVAL 2 HOUR で 2 時間引いていて、2022-12-31 22:00:00 を返しています。

Caes 3 では INTERVAL 3 DAY で 三日引いていて、2022-12-29 00:00:00 を返しています。

Caes 4 では INTERVAL 4 YEAR で 四年引いていて、2019-01-01 00:00:00 を返しています。

Caes 5 では INTERVAL '1 0:0:1' DAY_SECOND で 1 日と 1 秒引いていて、2022-12-30 23:59:59 を返しています。

Caes 6 では INTERVAL '1-2' YEAR_MONTH で 1 年と 2 ヶ月引いていて、2021-11-01 00:00:00 を返しています。

Caes 7 では INTERVAL -1 DAY で 1 日を足していて、2023-01-02 00:00:00 を返しています。


以上、MySQL のよく使う日付関数の DATE_ADD()・DATE_SUB() についてご説明しました。

© 2024 MySQL 入門