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