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

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文でのデータ更新を検討すると安全です。

  1. MySQLで日時を再フォーマットする方法|DATE_FORMAT関数の使い方

    MySQLで日時(datetime)の表示形式を変更したい場合は、DATE_FORMAT() 関数を使用します。MySQLはデフォルトで「yyyy-mm-dd」形式の日時を返しますが、この関数を使えば任意の形式に自由に変換できます。サンプルテーブルの作成まず、テーブルを作成します。mysql> create table DemoTable1558    -> (    -> EmployeeJoiningDate datetime    -> );Qu

  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文を使って、「日/月/年 時:分:秒」