【初心者向け】MySQLでDATE関数を使ってdatetime型から日付だけ抽出する方法
MySQLのdatetime
型は、日付と時刻をまとめて格納するデータ型です。しかし、場合によっては日付のみが必要になることがあります。
このチュートリアルでは、datetime
型から日付のみを選択する3つの方法を紹介します。
方法1:DATE()関数
DATE()
関数は、datetime
型から日付部分のみを取り出す関数です。
SELECT DATE(datetime_column) FROM table_name;
例
SELECT DATE(created_at) FROM users;
このクエリは、users
テーブルのcreated_at
列から日付のみを抽出します。
方法2:EXTRACT()関数
SELECT EXTRACT(YEAR FROM datetime_column) AS year,
EXTRACT(MONTH FROM datetime_column) AS month,
EXTRACT(DAY FROM datetime_column) AS day
FROM table_name;
SELECT EXTRACT(YEAR FROM created_at) AS year,
EXTRACT(MONTH FROM created_at) AS month,
EXTRACT(DAY FROM created_at) AS day
FROM users;
方法3:SUBSTRING()関数
SUBSTRING()
関数は、文字列の一部を切り出す関数です。
SELECT SUBSTRING(datetime_column, 1, 10) AS date
FROM table_name;
SELECT SUBSTRING(created_at, 1, 10) AS date
FROM users;
datetime
型から日付のみを選択するには、DATE()
関数、EXTRACT()
関数、SUBSTRING()
関数のいずれかを使用できます。それぞれの方法にはメリットとデメリットがあるので、状況に応じて使い分けることが重要です。
SELECT DATE(created_at) AS date
FROM users;
結果
| date |
|------------|
| 2024-03-29 |
| 2024-03-28 |
| 2024-03-27 |
| ... |
SELECT EXTRACT(YEAR FROM created_at) AS year,
EXTRACT(MONTH FROM created_at) AS month,
EXTRACT(DAY FROM created_at) AS day
FROM users;
| year | month | day |
|------|------|------|
| 2024 | 3 | 29 |
| 2024 | 3 | 28 |
| 2024 | 3 | 27 |
| ... | ... | ... |
SELECT SUBSTRING(created_at, 1, 10) AS date
FROM users;
| date |
|------------|
| 2024-03-29 |
| 2024-03-28 |
| 2024-03-27 |
| ... |
補足
これらのサンプルコードは、users
テーブルにcreated_at
というdatetime
型の列があることを前提としています。
また、結果の出力形式は、使用しているデータベースクライアントによって異なる場合があります。
DATE_FORMAT()
関数は、datetime
型を指定された形式に変換する関数です。
SELECT DATE_FORMAT(datetime_column, '%Y-%m-%d') AS date
FROM table_name;
SELECT DATE_FORMAT(created_at, '%Y-%m-%d') AS date
FROM users;
CAST()
関数は、データ型を変換する関数です。
SELECT CAST(datetime_column AS DATE) AS date
FROM table_name;
SELECT CAST(created_at AS DATE) AS date
FROM users;
FROM_UNIXTIME()
関数は、UNIXタイムスタンプを日付に変換する関数です。
SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(datetime_column)) AS date
FROM table_name;
SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(created_at)) AS date
FROM users;
mysql date datetime