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

【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型相当の形式へ簡単に変換できます。

  1. 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

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