【MySQL】「2017年1月」「2018年5月」などの日付文字列を完全な日付形式に変換する方法
「2017年1月」や「2018年5月」のような日付の文字列を、MySQLの完全な日付形式(例:2017-01-01)に変換するには、STR_TO_DATE() 関数と DATE_FORMAT() 関数を組み合わせて使用します。本記事では、実際のSQLサンプルを通じてその手順をわかりやすく解説します。
1. サンプルテーブルの作成
まず、日付文字列を格納するためのテーブルを作成します。
mysql> create table DemoTable1985
(
DueDate varchar(20)
);
Query OK, 0 rows affected (0.00 sec)
2. テストデータの挿入
INSERT文を使って、「月 年」形式の日付文字列を複数件登録します。
mysql> insert into DemoTable1985 values('Jan 2017');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1985 values('May 2018');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1985 values('Aug 2015');
Query OK, 1 row affected (0.00 sec)
3. 登録データの確認
SELECT文で、テーブル内のすべてのレコードを表示してみましょう。
mysql> select * from DemoTable1985;
実行結果は以下のとおりです。
+----------+ | DueDate | +----------+ | Jan 2017 | | May 2018 | | Aug 2015 | +----------+ 3 rows in set (0.00 sec)
4. 日付形式への変換クエリ
ここが本題のポイントです。STR_TO_DATE() で文字列を日付値に変換し、さらに DATE_FORMAT() で目的の書式に整形します。
mysql> select date_format(str_to_date(DueDate,'%b %Y'), '%Y-%m-01') as Result from DemoTable1985;
実行すると、次のように完全な日付形式に変換されます。
+------------+ | Result | +------------+ | 2017-01-01 | | 2018-05-01 | | 2015-08-01 | +------------+ 3 rows in set (0.00 sec)
書式指定子の解説
このクエリで使われている主な書式指定子は以下のとおりです。
- %b:月の省略名(Jan、Feb、Mar など)
- %Y:4桁の年(2017 など)
- %m:2桁ゼロ埋めの月(01〜12)
元の文字列には「日」の情報が含まれていないため、出力フォーマットを '%Y-%m-01' とすることで、各月の1日に統一して変換しています。この手法を使えば、「Jan 2017」→「2017-01-01」、「May 2018」→「2018-05-01」、「Aug 2015」→「2015-08-01」のように、任意の年月文字列を標準的なDATE型相当の形式へ簡単に変換できます。
-
PHP変数「11:00 AM」をMySQLの時間形式に変換する方法
PHPの「11:00 AM」をMySQLの時間形式に変換する方法 MySQLのTIME型やDATETIME型は、時刻を24時間表記の「HH:MM:SS」形式で管理します。そのため、「11:00 AM」のようにAM/PMを含む文字列をデータベースに保存する場合は、事前に形式を変換しておく必要があります。本記事では、PHP標準のDateTimeクラスを使った変換方法を、サンプルコードと実行結果付きで解説します。 変換の基本の流れ DateTime::createFromFormat() … 入力文字列をDateTimeオブジェクトとして解析する format() … 解析結果を「H:i:s」(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文を使って、「日/月/年 時:分:秒」