MySQLで文字列の末尾2文字を基準に並べ替える方法
MySQLでは、ORDER BY句とRIGHT()関数を組み合わせることで、文字列カラムの末尾2文字を基準にレコードを並べ替えることができます。IDの末尾にある番号順にソートしたい場合などに非常に便利なテクニックです。
基本構文
RIGHT(カラム名, 2)は、指定したカラムの値の右端から2文字を取り出す関数です。これをORDER BYに渡すことで、末尾2文字を基準としたソートが実現できます。
select yourColumnName from yourTableName ORDER BY RIGHT(yourColumnName, 2);
サンプルテーブルの作成
それでは、実際に動きを確認してみましょう。まずはテーブルを作成します。
mysql> create table OrderByLast2CharactersDemo
-> (
-> CustomerId varchar(20),
-> CustomerName varchar(20)
-> );
Query OK, 0 rows affected (0.58 sec)
レコードの挿入
次に、insertコマンドでテストデータを挿入します。CustomerIdには「名前-番号」という形式の文字列を格納しています。
mysql> insert into OrderByLast2CharactersDemo(CustomerId,CustomerName) values('John-98','John');
Query OK, 1 row affected (0.20 sec)
mysql> insert into OrderByLast2CharactersDemo(CustomerId,CustomerName) values('Carol-91','Carol');
Query OK, 1 row affected (0.21 sec)
mysql> insert into OrderByLast2CharactersDemo(CustomerId,CustomerName) values('Bob-99','Bob');
Query OK, 1 row affected (0.22 sec)
mysql> insert into OrderByLast2CharactersDemo(CustomerId,CustomerName) values('David-67','David');
Query OK, 1 row affected (0.15 sec)登録データの確認
select文ですべてのレコードを表示して確認します。
mysql> select *from OrderByLast2CharactersDemo;
実行結果は以下のとおりです。
+------------+--------------+
| CustomerId | CustomerName |
+------------+--------------+
| John-98 | John |
| Carol-91 | Carol |
| Bob-99 | Bob |
| David-67 | David |
+------------+--------------+
4 rows in set (0.00 sec)
末尾2文字で並べ替える実行例
ケース1:昇順(ASC)で並べ替える
ORDER BYはデフォルトで昇順にソートされます。CustomerIdの末尾2文字を基準に並べ替えてみましょう。
mysql> select CustomerId from OrderByLast2CharactersDemo ORDER BY RIGHT(CustomerId, 2);
実行結果:
+------------+
| CustomerId |
+------------+
| David-67 |
| Carol-91 |
| John-98 |
| Bob-99 |
+------------+
4 rows in set (0.01 sec)
末尾の数字「67」→「91」→「98」→「99」の順に、昇順で正しくソートされていることが確認できます。
ケース2:降順(DESC)で並べ替える
降順でソートしたい場合は、DESCキーワードを追加するだけです。
mysql> select CustomerId from OrderByLast2CharactersDemo ORDER BY RIGHT(CustomerId, 2) DESC;
実行結果:
+------------+
| CustomerId |
+------------+
| Bob-99 |
| John-98 |
| Carol-91 |
| David-67 |
+------------+
4 rows in set (0.00 sec)
まとめ
文字列の一部だけを基準にソートしたい場合は、RIGHT()のような文字列関数をORDER BY句内で直接使うのがポイントです。同様の考え方で、先頭部分ならLEFT()、任意の位置ならSUBSTRING()を使うこともできるので、用途に応じて使い分けるとよいでしょう。
-
MySQLで末尾の文字列に基づいてレコードをソートする方法
MySQLで文字列の末尾部分(例:「-D」や「-Smith」など)に基づいてレコードをソートしたい場合は、CASE式とORDER BY句を組み合わせることで実現できます。ここでは、実際のサンプルコードを使いながら、手順をわかりやすく解説します。 1. サンプルテーブルの作成 まずはデモ用のテーブルを作成します。顧客ID(ClientId)を自動採番の主キーとし、顧客名(ClientName)を格納するシンプルな構造です。 mysql> create table DemoTable -> ( -> ClientId int NOT NULL AUTO_INC
-
MySQLのREPLACE()関数でテーブル内の文字を置き換える方法
MySQLでは、REPLACE()関数を使うことで、文字列の中から特定の1文字だけを簡単に置き換えることができます。この記事では、実際にテーブルを作成し、UPDATE文とREPLACE()関数を組み合わせて文字を置き換える手順を、サンプルコード付きでわかりやすく解説します。 1. サンプルテーブルを作成する まず、置き換え対象となるテーブルを作成します。 mysql> create table DemoTable -> ( -> Name varchar(20) -> ); Query OK, 0 rows affected (0.69 sec