STR_TO_DATE関数とCAST関数で日付変換をマスターしよう!
MySQLで文字列を日付に変換する方法
STR_TO_DATE関数は、文字列を指定された形式の日付に変換します。構文は以下の通りです。
STR_TO_DATE(文字列, フォーマット)
文字列
: 変換したい文字列フォーマット
: 文字列の日付形式を指定するフォーマット文字列
フォーマット文字列は、以下の書式記号を使って指定します。
書式記号 | 説明 | 例 |
---|---|---|
%Y | 年 | 2023 |
%m | 月 | 05 |
%d | 日 | 20 |
%H | 時 | 13 |
%i | 分 | 30 |
%s | 秒 | 50 |
%f | マイクロ秒 | 123456 |
例:
-- 2023年5月20日を文字列から日付に変換
SELECT STR_TO_DATE('2023-05-20', '%Y-%m-%d');
CAST関数を使って、文字列を別の型に変換することもできます。日付に変換するには、以下のように使用します。
CAST(文字列 AS DATE)
-- 2023年5月20日を文字列から日付に変換
SELECT CAST('2023-05-20' AS DATE);
注意点
- 文字列形式が指定されたフォーマットと一致しない場合、エラーが発生します。
- 変換対象の文字列が日付として解釈できない場合は、NULLが返されます。
MySQLで文字列を日付に変換するには、STR_TO_DATE関数またはCAST関数を使用します。どちらの関数を使う場合も、文字列形式が指定されたフォーマットと一致していることを確認する必要があります。
-- 1. STR_TO_DATE関数を使う
-- 2023年5月20日 (YYYY-MM-DD形式)
SELECT STR_TO_DATE('2023-05-20', '%Y-%m-%d') AS 変換結果;
-- 2023年5月20日 (YYYY/MM/DD形式)
SELECT STR_TO_DATE('2023/05/20', '%Y/%m/%d') AS 変換結果;
-- 2023年5月 (YYYY-MM形式)
SELECT STR_TO_DATE('2023-05', '%Y-%m') AS 変換結果;
-- 2023年 (YYYY形式)
SELECT STR_TO_DATE('2023', '%Y') AS 変換結果;
-- 2. CAST関数を使う
-- 2023年5月20日 (YYYY-MM-DD形式)
SELECT CAST('2023-05-20' AS DATE) AS 変換結果;
-- 2023年5月20日 (文字列形式)
SELECT CAST('文字列形式の日付' AS DATE) AS 変換結果;
出力例
+-----------------+
| 変換結果 |
+-----------------+
| 2023-05-20 00:00:00 |
+-----------------+
| 2023-05-20 00:00:00 |
+-----------------+
| 2023-05-01 00:00:00 |
+-----------------+
| 2023-01-01 00:00:00 |
+-----------------+
| 2023-05-20 00:00:00 |
+-----------------+
| 2024-05-20 00:00:00 |
+-----------------+
このサンプルコードを参考に、様々な形式の文字列を日付に変換してみてください。
補足
- サンプルコードでは、変換結果を
変換結果
というエイリアスで表示していますが、これは任意です。お好きな名前でエイリアスを設定してください。 - 変換対象の文字列がテーブルのカラムにある場合は、カラム名を直接指定することもできます。
-- 例:`customers` テーブルの `birth_date` カラムを日付に変換
SELECT STR_TO_DATE(birth_date, '%Y-%m-%d') AS 生年月日 FROM customers;
MySQLで文字列を日付に変換するその他の方法
DATE_FORMAT関数は、日付をフォーマットされた文字列に変換する関数ですが、逆変換にも使用できます。構文は以下の通りです。
DATE_FORMAT(日付, フォーマット)
日付
: 変換したい日付
-- 2023年5月20日を文字列 "2023-05-20" に変換
SELECT DATE_FORMAT('2023-05-20', '%Y-%m-%d') AS 変換結果;
CONVERT(文字列, DATE)
-- 2023年5月20日を文字列 "2023-05-20" から日付に変換
SELECT CONVERT('2023-05-20', DATE) AS 変換結果;
SUBSTRING関数とTO_DAYS関数を使って、文字列を日付に変換する方法もあります。この方法は、文字列形式が一定でない場合などに役立ちます。
-- 2023年05月20日を文字列 "2023年05月20日" から日付に変換
SELECT TO_DAYS(SUBSTRING('2023年05月20日', 1, 4) + '-' +
SUBSTRING('2023年05月20日', 6, 2) + '-' +
SUBSTRING('2023年05月20日', 9, 2)) AS 変換結果;
- DATE_FORMAT関数とCONVERT関数は、STR_TO_DATE関数と比べて処理速度が遅い場合があります。
- SUBSTRING関数とTO_DAYS関数を使う方法は、複雑で分かりにくいコードになりやすいです。
- 文字列形式が一定で、処理速度が重要でない場合は、STR_TO_DATE関数またはCAST関数を使うのがおすすめです。
- 文字列形式が一定でない場合は、SUBSTRING関数とTO_DAYS関数を使う方法も検討できます。
- 日付をフォーマットされた文字列に変換したい場合は、DATE_FORMAT関数を使うことができます。
MySQLで文字列を日付に変換するには、様々な方法があります。それぞれの方法の特徴を理解し、状況に合わせて適切な方法を選択してください。
mysql string date