MySQLでchar型カラムをdatetime型に変換する方法をわかりやすく解説
MySQLでは、char型として保存された日付文字列をdatetime形式に変換したいケースがあります。本記事では、REPLACE関数とSTR_TO_DATE関数を組み合わせて、「12/31/2017 10:50」のような米国式の日付文字列を「2017-12-31 10:50:00」というdatetime形式へ変換する手順を、実際のSQLと実行結果付きで解説します。
サンプルテーブルの作成
まず、テーブルを作成します。ここでは配送日(ShippingDate)をあえてchar型として宣言しています。
mysql> create table DemoTable1472
-> (
-> ShippingDate char(35)
-> );
Query OK, 0 rows affected (0.46 sec)
テーブルへのデータ挿入
続いて、INSERTコマンドを使っていくつかのレコードを挿入します。
mysql> insert into DemoTable1472 values('12/31/2017 10:50');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable1472 values('01/10/2018 12:00');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable1472 values('03/20/2019 09:30');
Query OK, 1 row affected (0.14 sec)登録済みレコードの確認
SELECT文を実行して、テーブル内のすべてのレコードを表示してみましょう。
mysql> select * from DemoTable1472;
以下の出力が得られます。
+------------------+
| ShippingDate |
+------------------+
| 12/31/2017 10:50 |
| 01/10/2018 12:00 |
| 03/20/2019 09:30 |
+------------------+
3 rows in set (0.00 sec)
char型からdatetime型への変換クエリ
それでは本題です。以下のクエリが、MySQLでchar型フィールドをdatetime型に変換する方法です。
mysql> select str_to_date(replace(ShippingDate,'/',','),'%m,%d,%Y %T') from DemoTable1472;
実行すると、次のようにdatetime形式に整形された結果が出力されます。
+-----------------------------------------------------------+
| str_to_date(replace(ShippingDate,'/',','),'%m,%d,%Y %T') |
+-----------------------------------------------------------+
| 2017-12-31 10:50:00 |
| 2018-01-10 12:00:00 |
| 2019-03-20 09:30:00 |
+-----------------------------------------------------------+
3 rows in set (0.00 sec)
クエリの仕組み
この変換は2段階の処理で実現されています。
- REPLACE関数: 「12/31/2017 10:50」のようにスラッシュ区切りで保存された文字列の「/」を「,」に置き換えます。
- STR_TO_DATE関数: 置き換えた後の文字列を、書式指定子「%m,%d,%Y %T」(月・日・4桁の年・時刻)に従って解析し、datetime値として返します。
なお、取得時に変換するだけでなく、テーブル自体のカラム型を変更して恒久的にdatetime型へ移行したい場合は、事前にこの方法でデータを検証したうえで、ALTER TABLEによるカラム定義の変更やUPDATE文でのデータ更新を検討すると安全です。
-
MySQLで日時を再フォーマットする方法|DATE_FORMAT関数の使い方
MySQLで日時(datetime)の表示形式を変更したい場合は、DATE_FORMAT() 関数を使用します。MySQLはデフォルトで「yyyy-mm-dd」形式の日時を返しますが、この関数を使えば任意の形式に自由に変換できます。サンプルテーブルの作成まず、テーブルを作成します。mysql> create table DemoTable1558 -> ( -> EmployeeJoiningDate datetime -> );Qu
-
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文を使って、「日/月/年 時:分:秒」