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

MySQLでvarchar型の日付データを正しく並び替える方法(STR_TO_DATE活用)

varchar型で保存された日付をORDER BYでソートするには

MySQLでは、varchar型(文字列型)として保存された日付データを正しく並び替えるには、ORDER BY句とSTR_TO_DATE()関数を組み合わせて使用します。基本的な構文は以下の通りです。

select *from テーブル名 ORDER BY STR_TO_DATE(カラム名, '%M %Y') DESC;

1. サンプルテーブルの作成

まず、日付をvarchar型で保持するテーブルを作成します。

mysql> create table DemoTable678(DueDate varchar(200));
Query OK, 0 rows affected (0.62 sec)

2. レコードの挿入

INSERTコマンドを使用して、日付データを文字列として挿入します。

mysql> insert into DemoTable678 values('March 2019');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable678 values('November 2018');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable678 values('January 2019');
Query OK, 1 row affected (0.18 sec)

3. テーブルの内容を確認する

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

mysql> select *from DemoTable678;

実行結果は以下のようになります。

+---------------+
| DueDate       |
+---------------+
| March 2019    |
| November 2018 |
| January 2019  |
+---------------+
3 rows in set (0.00 sec)

4. varchar型の日付で並び替えるクエリ

以下のクエリを実行すると、varchar型として保存された日付を基準に降順(新しい順)で並び替えることができます。

mysql> select *from DemoTable678 ORDER BY STR_TO_DATE(DueDate, '%M %Y') DESC;

実行結果:

+---------------+
| DueDate       |
+---------------+
| March 2019    |
| January 2019  |
| November 2018 |
+---------------+
3 rows in set (0.00 sec)

解説:STR_TO_DATE関数のポイント

STR_TO_DATE()は、文字列を日付値(DATE型)に変換するための関数です。今回使用したフォーマット指定子の意味は次の通りです。

  • %M … 完全な月名(March、November、Januaryなど)
  • %Y … 4桁の年(2019、2018など)

この関数を経由することで、文字列のままでは正しく比較できない日付データも、実際の日付として扱えるようになります。

なお、単純にORDER BY DueDate DESCとした場合は文字列として比較されるため、「November 2018」が「March 2019」より新しいと判定されるなど、意図しない順序になる点に注意してください。varchar型の日付をソートする際は、必ずSTR_TO_DATE()で日付に変換してから並び替えるのがポイントです。

  1. MySQLでDATETIME型の列に時間を追加する方法|ADDTIME()関数の使い方を解説

    DATETIME型の値に時間を加算したい場合、MySQLではADDTIME()関数を使うのが便利です。この記事では、実際にテーブルを作成し、サンプルデータを挿入しながら、ADDTIME()関数で時間を追加する手順をわかりやすく解説します。1. テーブルを作成するまず、DATETIME型の列を持つテーブルを作成します。mysql> create table DemoTable1848 ( ShippingDate datetime ); Query OK, 0 rows affected (0.00 sec)2. サンプルデータを挿入する次に、INSERT文を使って

  2. MySQLのフィールドに現在の日付を設定する方法(UNIX_TIMESTAMP(now)の使い方)

    MySQLでは、unix_timestamp()関数を使うことで、現在の日時をUNIXタイムスタンプとして取得し、テーブルのフィールドに簡単に設定できます。この記事では、実際にテーブルを作成し、現在の日付(UNIXタイムスタンプ)をフィールドに設定する手順を解説します。UNIXタイムスタンプとはUNIXタイムスタンプとは、1970年1月1日00:00:00 UTCからの経過秒数を表す数値です。日時を整数として扱えるため、比較や計算が容易になり、データベースでの時間管理によく利用されます。サンプルテーブルの作成まず、以下のようにCREATE TABLE文でテーブルを作成します。mysql>