MySQLで日付に関連する機能は多岐にわたりますが、ここでは基本的な機能の説明とcars
テーブルを使った具体的な使用例をいくつか紹介します。
car_id | name | price | created_at, | updated_at | deleted_at |
1 | セダン | 2590000 | 2020-08-07 06:40:26 | 2023-08-08 08:58:01 | 2021-01-01 00:00:00 |
2 | クーペ | 4990000 | 2020-09-17 10:30:11 | 2023-08-26 02:14:46 | 2022-02-01 00:00:00 |
3 | SUV | 2990000 | 2020-10-07 06:40:26 | 2023-08-26 02:15:34 | |
4 | ハッチバック | 1980000 | 2020-11-07 06:40:26 | 2023-08-26 02:15:34 | |
5 | ステーションワゴン | 2010000 | 2020-12-07 06:40:26 | 2023-08-26 02:15:59 | |
6 | ミニバン | 3590000 | 2020-12-07 06:40:26 | 2023-08-26 02:15:59 | |
7 | 軽自動車 | 1000000 | 2020-12-07 06:40:26 | 2023-08-26 02:15:59 | |
8 | 商用車 | 1390000 | 2020-12-07 06:40:26 | 2023-08-26 02:15:59 |
cars
テーブル日付と時刻のデータ型
まず、cars
テーブルで使用されているdatetime
型について説明します。datetime
は日付と時刻の両方を保持するデータ型で、フォーマットはYYYY-MM-DD HH:MM:SS
です。他にも、date
(日付のみ)、time
(時刻のみ)、timestamp
(タイムゾーンの情報を持つ日時)、year
(年のみ)というデータ型があります。
関数と演算子
MySQLには日付けを操作するための様々な関数と演算子があります。
NOW()
, CURRENT_TIMESTAMP
現在の日付と時刻を返します。このテーブルではcreated_at
とupdated_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のマニュアルをご覧ください。