MySQLで文字数順に並べ替えるには?LENGTH()関数の使い方
MySQLで文字数順に並べ替える基本構文
MySQLでカラムの文字数を基準にレコードを並べ替えたい場合は、ORDER BY句とLENGTH()関数を組み合わせます。基本となる構文は以下のとおりです。
select *from yourTableName
order by LENGTH(yourColumnName) DESC;
DESC(降順)を指定すると、文字数が多いレコードから順に表示されます。反対に文字数の少ない順にしたい場合は、ASC(昇順)を指定してください。
サンプルテーブルの作成
まず、動作確認用のテーブル「DemoTable」を作成します。
mysql> create table DemoTable
-> (
-> Name varchar(100)
-> );
Query OK, 0 rows affected (0.50 sec)
テストデータの挿入
次に、insert文を使って複数のレコードを登録します。ここでは名前の長さが異なる4件のデータを用意しました。
mysql> insert into DemoTable values('John');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable values('Robert');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values('Bob');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values('David');
Query OK, 1 row affected (0.26 sec)登録済みデータの確認
select文でテーブル内のすべてのレコードを表示してみましょう。
mysql> select *from DemoTable;
実行結果は以下のとおりです。現時点では挿入した順番のまま並んでいます。
+--------+
| Name |
+--------+
| John |
| Robert |
| Bob |
| David |
+--------+
4 rows in set (0.00 sec)
文字数で並べ替えるクエリを実行する
それでは、LENGTH()関数を使って文字数の多い順(降順)に並べ替えてみましょう。
mysql> select *from DemoTable
-> order by LENGTH(Name) DESC;
実行結果は以下のとおりです。「Robert」(6文字)→「David」(5文字)→「John」(4文字)→「Bob」(3文字)の順に、文字数の降順できちんと並べ替えられているのが分かります。
+--------+
| Name |
+--------+
| Robert |
| David |
| John |
| Bob |
+--------+
4 rows in set (0.00 sec)
補足:マルチバイト文字を扱う場合はCHAR_LENGTH()がおすすめ
LENGTH()関数は文字列のバイト数を返すため、日本語などのマルチバイト文字では意図しない結果になることがあります。日本語を含むデータを文字数で正確にソートしたい場合は、文字数そのものを返すCHAR_LENGTH()関数を使用するのが安全です。使い方はLENGTH()と同じで、order by CHAR_LENGTH(カラム名) DESC;のように記述できます。
-
MySQLで一連の数値の最初の数値を基準に並べ替えるクエリの書き方
概要カンマ区切りで格納された一連の数値(例:「245,654,76,89,98」)を、その中の最初の数値を基準にして並べ替えたい場合は、ORDER BY句とSUBSTRING_INDEX()関数、さらにCAST()関数を組み合わせることで実現できます。まずはサンプル用のテーブルを作成しましょう。mysql> create table DemoTable ( SetOfNumbers text ); Query OK, 0 rows affected (0.53 sec)続いて、insertコマンドでいくつかレコードを挿入します。mysql> insert into Demo
-
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