MySQLで日付に関連する機能は多岐にわたりますが、ここでは基本的な機能の説明とcarsテーブルを使った具体的な使用例をいくつか紹介します。

car_idnamepricecreated_at, updated_at deleted_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:34
4ハッチバック19800002020-11-07 06:40:262023-08-26 02:15:34
5ステーションワゴン20100002020-12-07 06:40:262023-08-26 02:15:59
6ミニバン35900002020-12-07 06:40:262023-08-26 02:15:59
7軽自動車10000002020-12-07 06:40:262023-08-26 02:15:59
8商用車13900002020-12-07 06:40:262023-08-26 02:15:59
carsテーブル
carsテーブルのデータ型

日付と時刻のデータ型

まず、carsテーブルで使用されているdatetime型について説明します。datetimeは日付と時刻の両方を保持するデータ型で、フォーマットはYYYY-MM-DD HH:MM:SSです。他にも、date(日付のみ)、time(時刻のみ)、timestamp(タイムゾーンの情報を持つ日時)、year(年のみ)というデータ型があります。

関数と演算子

MySQLには日付けを操作するための様々な関数と演算子があります。

NOW(), CURRENT_TIMESTAMP

現在の日付と時刻を返します。このテーブルではcreated_atupdated_atにデフォルト値として設定されています。

CURDATE(), CURRENT_DATE()

現在の日付を返します(時刻情報は含まれません)。

CURTIME(), CURRENT_TIME()

現在の時刻を返します(日付情報は含まれません)。

DATE()

日付けまたは日付けと時刻を含む値から日付の部分のみを取り出します。

SELECT DATE(created_at) AS date_only FROM cars;

<結果の例>

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

TIME()

日付けまたは日付けと時刻を含む値から時刻の部分のみを取り出します。

YEAR(), MONTH(), DAY(), HOUR(), MINUTE(), SECOND()

日付からそれぞれ年、月、日、時、分、秒を取り出します。

DATEDIFF()

二つの日付の差(日数)を返します。

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

<結果の例>

days_until_end_of_year
1241
1200
1180

DATE_ADD()DATE_SUB()

日付に指定した時間を加えたり(DATE_ADD())、引いたり(DATE_SUB())することができます。

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

<結果の例>

next_year
2021-08-07 06:40:26
2021-09-17 10:30:11
2021-10-07 06:40:26

TIMESTAMPDIFF()

二つの日付の差を指定した単位で返します。

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

<結果の例>

months_since_created
39
37
37

DAYOFWEEK(), DAYOFMONTH(), DAYOFYEAR()

日付から週の日、月の日、年の日を取得します。

WEEK(), MONTH(), YEAR()

日付から週番号、月、年を取得します。

SELECT WEEK(created_at) AS week_of_year FROM cars;

<結果の例>

week_of_year
31
37
40

FORMAT()

数値をフォーマットした文字列として表示しますが、日付関連で使用するときは日付を文字列としてフォーマットする際にも便利です。

STR_TO_DATE(), DATE_FORMAT()

文字列を日付に変換したり(STR_TO_DATE())、日付を指定したフォーマットの文字列に変換したり(DATE_FORMAT())します。

SELECT DATE_FORMAT(created_at, '%Y-%m-%d %H:%i:%s') AS formatted_date FROM cars;

<結果の例>

formatted_date
2020-08-07 06:40:26
2020-09-17 10:30:11
2020-10-07 06:40:26

これらは日付に関連するMySQLの機能の一部に過ぎませんので更に詳しく学びたい方は、Mysqlのマニュアルをご覧ください。

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