MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLでVARCHAR型を日付に変換する方法|STR_TO_DATEとDATE_FORMATの使い方

MySQLでVARCHAR型のカラムに保存された日付文字列を日付として扱いたい場合、STR_TO_DATE()関数とDATE_FORMAT()関数を組み合わせて変換することができます。この記事では、サンプルテーブルの作成からデータ挿入、変換クエリの実行まで、手順を追って詳しく解説します。

変換に使う基本構文

VARCHAR型を日付に変換する際の基本的な構文は以下の通りです。

SELECT DATE_FORMAT(STR_TO_DATE(カラム名, '入力フォーマット指定子'), '出力フォーマット指定子') AS 任意の別名 FROM テーブル名;

処理の流れとしては、まずSTR_TO_DATE()で文字列を日付値に変換し、その後DATE_FORMAT()で目的の日付形式に整形します。

主なフォーマット指定子

  • %Y:4桁の年(例:2020)
  • %m:2桁の月(01〜12)
  • %d:2桁の日(01〜31)

サンプルテーブルの作成

構文を理解するために、まずテーブルを作成しましょう。テーブル作成のクエリは次の通りです。

mysql> create table VarcharToDate
    -> (
    -> Id int NOT NULL AUTO_INCREMENT,
    -> Created_Time varchar(100),
    -> PRIMARY KEY(Id)
    -> );
Query OK, 0 rows affected (1.10 sec)

テストデータの挿入

INSERTコマンドを使って、いくつかのレコードを挿入します。ここでは「日/月/年」の形式(例:12/1/2016)で日付が保存されている点に注目してください。

mysql> insert into VarcharToDate(Created_Time) values('12/1/2016');
Query OK, 1 row affected (0.14 sec)

mysql> insert into VarcharToDate(Created_Time) values('14/3/2017');
Query OK, 1 row affected (0.18 sec)

mysql> insert into VarcharToDate(Created_Time) values('15/3/2018');
Query OK, 1 row affected (0.21 sec)

mysql> insert into VarcharToDate(Created_Time) values('19/5/2011');
Query OK, 1 row affected (0.18 sec)

mysql> insert into VarcharToDate(Created_Time) values('19/8/2019');
Query OK, 1 row affected (0.15 sec)

mysql> insert into VarcharToDate(Created_Time) values('21/11/2020');
Query OK, 1 row affected (0.23 sec)

登録データの確認

SELECT文ですべてのレコードを表示してみましょう。

mysql> select *from VarcharToDate;
+----+--------------+
| Id | Created_Time |
+----+--------------+
|  1 | 12/1/2016    |
|  2 | 14/3/2017    |
|  3 | 15/3/2018    |
|  4 | 19/5/2011    |
|  5 | 19/8/2019    |
|  6 | 21/11/2020   |
+----+--------------+
6 rows in set (0.00 sec)

VARCHAR型を日付に変換するクエリ

それでは、実際にVARCHAR型を日付へ変換してみます。まずSTR_TO_DATE()関数で文字列を日付に変換し、続いてDATE_FORMAT()関数で「YYYY-MM-DD」形式に整形します。

mysql> select date_format(str_to_date(Created_Time, '%d/%m/%Y'), '%Y-%m-%d') as Date from VarcharToDate;

ここでのポイントは、元データが「日/月/年」の順で保存されているため、入力側のフォーマット指定子として%d/%m/%Yを指定している点です。元データの並び順と指定子が一致していないと、正しく変換できません。

実行結果

上記クエリの実行結果は以下の通りです。すべての日付が「YYYY-MM-DD」形式に統一されました。

+------------+
| Date       |
+------------+
| 2016-01-12 |
| 2017-03-14 |
| 2018-03-15 |
| 2011-05-19 |
| 2019-08-19 |
| 2020-11-21 |
+------------+
6 rows in set (0.00 sec)

まとめ

MySQLでVARCHAR型の日付文字列を日付に変換するには、STR_TO_DATE()で文字列を解析し、DATE_FORMAT()で希望の出力形式に整えるのが基本です。特に、元データが「年・月・日」のどの順序で保存されているかを確認し、それに対応したフォーマット指定子を選ぶことが、正しく変換するための重要なポイントとなります。

  1. VARCHARデータをMySQLの日付形式に変換する方法

    VARCHAR型の日付文字列をDATE型に変換するにはMySQLでは、VARCHAR型として保存されている日付データを正式な日付形式に変換する場合、STR_TO_DATE() 関数を使用します。この関数は、文字列と書式指定子(フォーマット指定子)を組み合わせることで、任意の形式の文字列を日付値へと変換できる便利な機能です。以下、具体的な手順をサンプルとともに解説します。1. サンプルテーブルの作成まず、VARCHAR型のカラムを持つテーブルを作成します。mysql> create table DemoTable1989 ( DueDate varchar(20)

  2. MySQLで日付形式を変換する方法|STR_TO_DATE()関数の使い方を解説

    MySQLでは、VARCHAR型などで保存された文字列の日付データを、正しい日付・時刻形式に変換したいケースがよくあります。そんなときに活躍するのが STR_TO_DATE() 関数です。この記事では、実際のSQL例とともに具体的な使い方を解説します。サンプルテーブルの作成まず、日付を文字列として格納するテーブルを作成します。mysql> create table DemoTable2010 ( DueDate varchar(20) ); Query OK, 0 rows affected (0.68 sec)テストデータの挿入INSERT文を使って、「日/月/年 時:分:秒」