今回は、MySQLでの日付・時刻操作について、初学者でも理解しやすいようにまとめました。
「日付を抽出したいけど、どう書くの?」
「1年後の日付を出したい!」
…そんな場面に役立つ、基礎関数+実用例をcars2テーブルを使って紹介していきます!
まずはテーブルの作成
DROP TABLE IF EXISTS cars2;
CREATE TABLE cars2 (
car_id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
price INT NOT NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
deleted_at DATETIME NULL DEFAULT NULL
);
INSERT INTO cars2 (
car_id,
name,
price,
created_at
) VALUES
(
1,
'セダン',
2590000,
now()
),
(
2,
'クーペ',
4990000,
'2020-09-17 10:30:11'
),
(
3,
'SUV',
2990000,
'2020-10-07 06:40:26'
);

このテーブルを使って、MySQLの日付系関数の使い方を学びましょう!
MySQLの日付型と関数の基本
DATETIME型とは?
- 形式:
YYYY-MM-DD HH:MM:SS - 例:
2020-08-07 06:40:26 - 特徴:日付と時刻を同時に格納できる型です
cars2テーブルで使える実例
-- ① created_atの日付だけを抽出したい
SELECT DATE(created_at) AS date_only FROM cars2;-- ② 年月日を分解して取り出す
SELECT
YEAR(created_at) AS year,
MONTH(created_at) AS month,
DAY(created_at) AS day
FROM cars2;
-- ③ 今年の年末まであと何日?
SELECT DATEDIFF('2026-12-31', created_at) AS days_until_end_of_year FROM cars2;
-- ④ 登録日(created_at)に1年加算したい
SELECT DATE_ADD(created_at, INTERVAL 1 YEAR) AS next_year FROM cars2;
-- ⑤ created_atからの経過月数を求める
SELECT TIMESTAMPDIFF(MONTH, created_at, NOW()) AS months_since_created FROM cars2;
-- ⑥ created_atの曜日・月日を知りたい
SELECT
DAYOFWEEK(created_at) AS day_of_week,
WEEK(created_at) AS week_of_year
FROM cars2;
- --
DAYOFWEEKは 1=日曜日, 2=月曜日, … という形式で返します。
-- ⑦ 日付の整形(フォーマット変換)
SELECT DATE_FORMAT(created_at, '%Y年%m月%d日 %H時%i分') AS jp_format FROM cars2;
まとめ
MySQLの日付関連機能を使いこなすことで、次のようなことが簡単にできるようになります。
- 特定日より後のデータを抽出
- 日時の加減算
- 日付フォーマットの整形
- 登録からの経過期間の集計
よく使う日付関数【一覧表】
| 関数 | 概要 | 例 |
|---|---|---|
NOW() | 現在の日時を取得 | 2025-06-03 10:20:00 |
CURDATE() | 現在の日付だけ | 2025-06-03 |
DATE() | 日付部分だけ抽出 | DATE(created_at) |
TIME() | 時間部分だけ抽出 | TIME(created_at) |
YEAR(), MONTH(), DAY() | 年・月・日を抽出 | YEAR(created_at) |
DATEDIFF() | 2つの日付の差(日数) | DATEDIFF(NOW(), created_at) |
DATE_ADD() | 日付を加算 | DATE_ADD(created_at, INTERVAL 1 YEAR) |
DATE_SUB() | 日付を減算 | DATE_SUB(created_at, INTERVAL 1 DAY) |
TIMESTAMPDIFF() | 単位を指定して差を出す | TIMESTAMPDIFF(MONTH, created_at, NOW()) |
DATE_FORMAT() | 日付を文字列として整形 | DATE_FORMAT(created_at, '%Y/%m/%d') |
データベースの運用では、「いつ」データが作られたか・更新されたかを把握することがとても大切です。
日付関数を味方につけて、賢くスマートなSQLライフを送ってくださいね!
何かつまずいたら、いつでも相談してください!