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;
[実行結果]
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;
[実行結果]
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() についてご説明しました。