今回は、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'
);

DEFAULTの意味

created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP

レコード作成時に値を指定しない場合、現在日時が自動で入ります。NULL は不可で、その後の更新では基本的に変わらず、作成日時の記録に使います。

updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

作成時は現在日時が入り、さらにレコードが更新されるたび自動で現在日時に更新されます。NULL は不可で、最終更新日時の管理に使います。

実行結果

テーブルの構造

このテーブルを使って、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ライフを送ってくださいね!

何かつまずいたら、いつでも相談してください!

最後までお読みいただきありがとうございます。