MySQLで日付を昇順(ASC)に並べ替える方法|STR_TO_DATE()関数の使い方
MySQLで文字列として保存された日付を昇順にソートする
MySQLでは、STR_TO_DATE() 関数を使うことで、varchar型など文字列として保存されている日付を正しく日付として認識し、昇順(ASC)に並べ替えることができます。
ここでは、実際にテーブルを作成して、日付の昇順ソートを行う手順を解説します。
1. テーブルの作成
まず、以下のコマンドでサンプル用のテーブルを作成します。
mysql> create table DemoTable
(
AdmissionDate varchar(200)
);
Query OK, 0 rows affected (1.19 sec)
2. レコードの挿入
次に、INSERT文を使ってテーブルにレコードを挿入します。日付は「日-月-年」の形式(例:12-01-2019)で文字列として格納しています。
mysql> insert into DemoTable values('12-01-2019');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values('14-12-2016');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values('26-04-2018');
Query OK, 1 row affected (0.34 sec)
mysql> insert into DemoTable values('31-05-2013');
Query OK, 1 row affected (0.30 sec)3. テーブル内の全レコードを表示
SELECT文でテーブル内のすべてのレコードを確認してみましょう。
mysql> select * from DemoTable;
実行すると、以下のような結果が出力されます。
+---------------+
| AdmissionDate |
+---------------+
| 12-01-2019 |
| 14-12-2016 |
| 26-04-2018 |
| 31-05-2013 |
+---------------+
4 rows in set (0.00 sec)
4. 日付を昇順(ASC)に並べ替えるクエリ
文字列のまま ORDER BY を使うと、意図した通りの日付順にならないことがあります。そこで、STR_TO_DATE() 関数を使って文字列を日付型に変換してからソートします。
mysql> select *from DemoTable ORDER BY STR_TO_DATE(AdmissionDate,'%d-%m-%Y') ASC;
実行結果
上記のクエリを実行すると、日付が古いものから新しいものへと正しく昇順に並べ替えられます。
+---------------+
| AdmissionDate |
+---------------+
| 31-05-2013 |
| 14-12-2016 |
| 26-04-2018 |
| 12-01-2019 |
+---------------+
4 rows in set (0.00 sec)
ポイント解説
- %d-%m-%Y は「日-月-年」の形式を指定するフォーマットです。データの形式に合わせて適宜変更してください(例:「年-月-日」なら %Y-%m-%d)。
- 降順(DESC)で並べ替えたい場合は、「ASC」を「DESC」に置き換えるだけで対応できます。
- 頻繁に日付でソートする場合は、カラムの型を DATE 型にしておくと、変換処理が不要になりパフォーマンス面でも有利です。
-
MySQLでINSTR()関数を使って特定の単語の位置に基づいてレコードを並び替える方法
MySQLで特定の単語を基準に並び替えるにはMySQLでは、ORDER BY INSTR() を使用することで、文字列の中に特定の単語が出現する位置に基づいてレコードを並び替えることができます。ここでは、実際のサンプルを使ってその手順を詳しく解説します。サンプルテーブルの作成まず、テーブルを作成します。mysql> create table DemoTable822(Word text);Query OK, 0 rows affected (1.11 sec)レコードの挿入次に、INSERTコマンドを使ってテーブルにいくつかのレコードを挿入します。mysql> insert int
-
MySQLで最初の文字を基準にレコードを並べ替える方法(ORDER BY CASEの使い方)
MySQLで最初の文字を基準に並べ替える方法MySQLでレコードを「最初の文字」を基準に並べ替えたい場合は、ORDER BY句とCASE式を組み合わせます。ここでは、LEFT関数で先頭の1文字を取得し、CASE式で条件分岐させることで、特定の文字で始まるレコードを優先的に表示する方法を解説します。1. サンプルテーブルの作成まず、並べ替えの動作を確認するためのテーブルを作成します。mysql> create table DemoTable1535 -> ( -> Value varchar(100) -> );Query OK, 0 rows affe