今回は、MySQLでの日付・時刻操作について、初学者でも理解しやすいようにまとめました。

「日付を抽出したいけど、どう書くの?」
「1年後の日付を出したい!」
…そんな場面に役立つ、基礎関数+実用例をcarsテーブルを使って紹介していきます!


まずはテーブルの構造を確認

今回使うcarsテーブルには、こんなカラムがあります。

car_idnamepricecreated_atupdated_atdeleted_at
1セダン25900002020-08-07 06:40:262023-08-08 08:58:012021-01-01 00:00:00
2クーペ49900002020-09-17 10:30:112023-08-26 02:14:462022-02-01 00:00:00
3SUV29900002020-10-07 06:40:262023-08-26 02:15:34NULL
..................

このテーブルを使って、MySQLの日付系関数の使い方を学びましょう!


MySQLの日付型と関数の基本

DATETIME型とは?

  • 形式YYYY-MM-DD HH:MM:SS
  • 2020-08-07 06:40:26
  • 特徴:日付と時刻を同時に格納できる型です

よく使う日付関数【一覧表】

関数概要
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')

carsテーブルで使える実例

① created_atの日付だけを抽出したい

SELECT DATE(created_at) AS date_only FROM cars;

date_only
2020-08-07
2020-09-17
2020-10-07

② 年月日を分解して取り出す

SELECT
  YEAR(created_at) AS year,
  MONTH(created_at) AS month,
  DAY(created_at) AS day
FROM cars;


③ 今年の年末まであと何日?

SELECT DATEDIFF('2023-12-31', created_at) AS days_until_end_of_year FROM cars;


④ 登録日(created_at)に1年加算したい

SELECT DATE_ADD(created_at, INTERVAL 1 YEAR) AS next_year FROM cars;


⑤ created_atからの経過月数を求める

SELECT TIMESTAMPDIFF(MONTH, created_at, NOW()) AS months_since_created FROM cars;


⑥ created_atの曜日・月日を知りたい

SELECT 
  DAYOFWEEK(created_at) AS day_of_week,
  WEEK(created_at) AS week_of_year
FROM cars;

  • DAYOFWEEKは 1=日曜日, 2=月曜日, … という形式で返します。

⑦ 日付の整形(フォーマット変換)

SELECT DATE_FORMAT(created_at, '%Y年%m月%d日 %H時%i分') AS jp_format FROM cars;

jp_format
2020年08月07日 06時40分

日付がNULLの行を除外したい場合は?

SELECT * FROM cars WHERE deleted_at IS NOT NULL;


現在の日時を取得するだけなら?

SELECT NOW();

-- → '2025-06-03 10:45:12'

補足:タイムゾーンについて

MySQLサーバーはデフォルトでUTCになっていることがあります。
JST(日本時間)に合わせたい場合は、次のように確認と設定が必要です。

SELECT @@global.time_zone;  -- 現在のタイムゾーンを確認


まとめ

MySQLの日付関連機能を使いこなすことで、次のようなことが簡単にできるようになります。

  • 特定日より後のデータを抽出
  • 日時の加減算
  • 日付フォーマットの整形
  • 登録からの経過期間の集計

今後の学習の指針

  • TIMESTAMPとの違い(タイムゾーンの扱い)を比較してみよう
  • IFNULL, COALESCEを使ってNULLを埋める工夫も習得しよう
  • 曜日名(DAYNAME())や月名(MONTHNAME())も表示してみよう
  • 日時のインデックス設計についても学んでパフォーマンスを意識しよう

データベースの運用では、「いつ」データが作られたか・更新されたかを把握することがとても大切です。
日付関数を味方につけて、賢くスマートなSQLライフを送ってくださいね!

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

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