MySQLで英数字文字列から数字のみを基準に並べ替える方法
MySQLで英数字文字列から数字のみを基準に並べ替える方法
「Adam_101」や「121John_567」のような英数字が混在した文字列から、数字の部分だけを基準にレコードを並べ替えたいケースはよくあります。MySQLでは、ORDER BY句とRIGHT()関数を組み合わせることで、このような並べ替えを簡単に実現できます。
RIGHT()関数は、文字列の右端から指定した文字数を抽出する関数です。例えば「RIGHT(StudentCode, 3)」と記述すると、StudentCode列の値の末尾3文字が取得されます。これを並べ替えのキーとして指定することで、文字列中の数字部分を基準にソートが可能になります。
1. サンプルテーブルの作成
まず、以下のSQL文でテーブルを作成します。
mysql> create table DemoTable1948
(
StudentCode varchar(20)
);
Query OK, 0 rows affected (0.00 sec)2. レコードの挿入
次に、INSERT文を使ってサンプルデータを挿入します。
mysql> insert into DemoTable1948 values('121John_567');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1948 values('Adam_101');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1948 values('Bob_563');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1948 values('Sam_346');
Query OK, 1 row affected (0.00 sec)3. テーブルの内容を確認
SELECT文ですべてのレコードを表示してみましょう。
mysql> select * from DemoTable1948;
実行結果は以下の通りです。
+-------------+ | StudentCode | +-------------+ | 121John_567 | | Adam_101 | | Bob_563 | | Sam_346 | +-------------+ 4 rows in set (0.00 sec)
4. 数字部分を基準に並べ替えるクエリ
以下のクエリでは、RIGHT()関数で末尾3文字(数字部分)を抽出し、それをORDER BY句に指定することで並べ替えを行っています。
mysql> select * from DemoTable1948
order by RIGHT(StudentCode,3);実行結果は以下の通りです。末尾の数字の昇順に正しくソートされていることが確認できます。
+-------------+ | StudentCode | +-------------+ | Adam_101 | | Sam_346 | | Bob_563 | | 121John_567 | +-------------+ 4 rows in set (0.00 sec)
補足:数字の桁数が異なる場合の注意点
RIGHT()関数による比較は文字列として行われるため、数字の桁数がレコードごとに異なる場合は、意図した順序にならないことがあります。そのような場合は、CAST()関数を組み合わせて数値型に変換してから並べ替えると安全です。
mysql> select * from DemoTable1948
order by CAST(RIGHT(StudentCode,3) AS UNSIGNED);このように、RIGHT()関数とORDER BY句を活用すれば、英数字混在の文字列から数字部分だけを取り出して柔軟にソートできます。
-
MySQLで英字と数字が混在する列の値を正しくソートする方法
MySQLでは、英字と数字が混在するデータ(例:「J23」「C13」など)が格納された列を単純にORDER BY句でソートすると、すべて文字列として扱われるため、意図した通りの順序にならないことがあります。本記事では、LEFT関数・SUBSTR関数・CAST関数を組み合わせて、文字部分と数値部分をそれぞれ正しく並べ替える方法を、実際のSQL例とともに解説します。 サンプルテーブルの作成 まず、ソート対象となるテーブルを作成しましょう。 mysql> create table DemoTable -> ( -> Code varchar(20) ->
-
MySQLで数字を含む文字列を自然な順序で並べ替える方法
MySQLで数字を含む文字列を自然な順序で並べ替える方法MySQLで「2J John has 9」や「2J John has 58」のように数字が混ざった文字列を並べ替えたい場合、単純なORDER BYでは文字列単位で比較されるため、意図したとおりの順序にならないことがあります。このようなときは、REGEXP_REPLACE関数やLENGTH関数をORDER BY句と組み合わせることで、人間にとって自然な順序(自然順ソート)を実現できます。ここでは、実際にテーブルを作成して手順を確認していきましょう。1. サンプルテーブルの作成まず、CREATE TABLE文でテーブルを作成します。mysql