【MySQL】日付・時刻の取得・計算メモ

MySQLの日付・時刻の取得やフォーマット、計算の使い方をまとめました。

内容は随時追加していきます。

現在日付・現在時刻を取得する

現在日時

SELECT
    NOW(),
    SYSDATE()
;

↓結果↓

+---------------------+---------------------+
| NOW()               | SYSDATE()           |
+---------------------+---------------------+
| 2023-12-12 17:26:32 | 2023-12-12 17:26:32 |
+---------------------+---------------------+

現在日付

SELECT CURDATE(); -- 例:2023-12-12

○○を取得する/フォーマット

年月日(DATE)

SELECT DATE('2023/03/10 11:22:33'); -- 2023-03-10

年(YEAR)

SELECT YEAR('2023/03/10'); -- 2023

月(MONTH)

SELECT MONTH('2023/03/10'); -- 3

日(DAY)

SELECT DAY('2023/01/10'); -- 10

曜日(DAYOFWEEK/WEEKDAY)

戻り値が異なるだけで、どちらでも曜日は取得できます。

SELECT
    DAYOFWEEK('2024-04-01'), -- 2
    WEEKDAY('2024-04-01')    -- 0
;

戻り値の一覧は下記のとおりです。

曜日DAYOFWEEKWEEKDAY
16
20
31
42
53
64
75

フォーマット

SET @d = DATE('2026-04-01');
SELECT
	DATE_FORMAT(@d, '%Y'), -- 2026
	DATE_FORMAT(@d, '%y'), -- 26
	DATE_FORMAT(@d, '%m'), -- 04
	DATE_FORMAT(@d, '%c'), -- 4
	DATE_FORMAT(@d, '%d'), -- 01
	DATE_FORMAT(@d, '%e'), -- 1
	DATE_FORMAT(@d, '%w')  -- 1(=日曜日)

月初の日付

直接取得できる関数はないので、関数の組み合わせで取得します。

SELECT ADDDATE(LAST_DAY(ADDDATE('2026-04-12', INTERVAL -1 MONTH)), INTERVAL 1 DAY); -- 2026-04-01

こちらでもOK。

SELECT DATE(CONCAT(DATE_FORMAT('2026-04-12', '%Y-%m'), '-01')); -- 2026-04-01

月末の日付(LAST_DAY)

SELECT LAST_DAY('2026-04-12'); -- 2026-04-30

日付の加算・減算

n日後・n日前

SELECT
    ADDDATE('2023/01/01', INTERVAL 10 DAY), -- 2023-01-11 
    ADDDATE('2023/01/01', INTERVAL -10 DAY) -- 2022-12-22
;

n月後・n月前

SELECT
    ADDDATE('2023/01/01', INTERVAL 1 MONTH),
    ADDDATE('2023/01/01', INTERVAL -1 MONTH)

n年後・n年前

SELECT
    ADDDATE('2023/01/01', INTERVAL 1 YEAR),
    ADDDATE('2023/01/01', INTERVAL -1 YEAR)

n週後・n週前

SELECT
    ADDDATE('2023/01/01', INTERVAL 1 WEEK),
    ADDDATE('2023/01/01', INTERVAL -1 WEEK)

日数の間隔を計算(日数計算)

日数計算

SELECT
	DATEDIFF('2025-01-31', '2025-01-01') -- 30

月数計算

SELECT
	PERIOD_DIFF(202512, 202501) -- 11

以上になります。
お読み頂き、ありがとうございました。