MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLでVARCHAR型の数値列をASC・DESC順に正しく並べ替える方法

はじめに

MySQLでは、VARCHAR型の列に数値が文字列として格納されている場合、そのままORDER BYで並べ替えると辞書順(文字列順)でソートされてしまい、意図した数値順にならないことがあります。例えば「10」が「1000」よりも後ろに配置されるといった問題が発生します。この問題を解決するには、CAST関数を使って文字列を数値型に変換してから並べ替えます。本記事では、昇順(ASC)・降順(DESC)それぞれの方法を実例とともに解説します。

サンプルテーブルの作成

まず、VARCHAR型の列を持つテーブルを作成します。

mysql> create table DemoTable726 (Value varchar(100));
Query OK, 0 rows affected (0.60 sec)

レコードの挿入

INSERTコマンドを使って、テーブルにいくつかのレコードを挿入します。

mysql> insert into DemoTable726 values('100');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable726 values('10');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable726 values('110');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable726 values('2000');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable726 values('1000');
Query OK, 1 row affected (0.14 sec)

レコードの確認

SELECT文ですべてのレコードを表示してみましょう。

mysql> select *from DemoTable726;

以下のような出力が得られます。

+-------+
| Value |
+-------+
| 100 |
| 10 |
| 110 |
| 2000 |
| 1000 |
+-------+
5 rows in set (0.00 sec)

昇順(ASC)で並べ替える方法

VARCHAR型の数値列を昇順で並べ替えるには、CAST関数でDECIMAL型に変換してからORDER BY句を使用します。並び順の指定を省略した場合は、自動的に昇順(ASC)として扱われます。

mysql> select *from DemoTable726 order by CAST(Value AS DECIMAL(20,2));

実行結果は以下のとおりです。

+-------+
| Value |
+-------+
| 10 |
| 100 |
| 110 |
| 1000 |
| 2000 |
+-------+
5 rows in set (0.00 sec)

文字列ではなく数値として評価されているため、「10 → 100 → 110 → 1000 → 2000」という正しい昇順の結果が得られます。

降順(DESC)で並べ替える方法

降順で表示したい場合は、ORDER BY句の末尾にDESCを付けるだけです。

mysql> select *from DemoTable726 order by CAST(Value AS DECIMAL(20,2)) DESC;

実行結果は以下のとおりです。

+-------+
| Value |
+-------+
| 2000 |
| 1000 |
| 110 |
| 100 |
| 10 |
+-------+
5 rows in set (0.00 sec)

補足:その他の変換方法

CAST(Value AS DECIMAL)の代わりに、CONVERT(Value, DECIMAL(20,2))関数を使っても同じ結果が得られます。また、Value + 0のように数値との演算を利用して暗黙的に型変換を行う方法もあります。ただし、意図を明確に伝え、予期しない動作を防ぐという観点からは、CASTによる明示的な型変換が最も確実で推奨される方法です。

まとめ

VARCHAR型の数値列を並べ替える際は、CAST(Value AS DECIMAL)で数値型に変換してからORDER BYを使用することで、昇順・降順ともに正しい順序でソートできます。文字列として格納された数値データを扱う際の定番テクニックなので、ぜひ覚えておきましょう。

  1. MySQLでカスケード(テーブル定義)を表示する方法|SHOW CREATE TABLEの使い方

    MySQLでテーブルの「カスケード」、つまりテーブルを作成した際のCREATE TABLE文の内容を確認したい場合は、SHOW CREATE TABLEステートメントを使用します。このコマンドを実行すると、カラムのデータ型、主キー、ユニークキー、インデックス、ストレージエンジン、文字セットといったテーブルの完全な定義を一度に確認できます。 手順1:サンプルテーブルを作成する まず、動作を確認するためのデモテーブルを作成しましょう。以下のSQLを実行します。 mysql> create table DemoTable1378 -> ( -> Id int N

  2. MySQLでvarchar型の時刻データを正しい時間形式に変換する方法

    varchar型として保存された「1620」や「2345」のような時刻データを、実際の時間形式(例:04:20)に変換したい場合、MySQLのTIME_FORMAT()関数を使用することで実現できます。この記事では、SUBSTRING()とCONCAT()を組み合わせて、4桁の文字列を「時:分」の形式に整形する手順を解説します。1. サンプルテーブルの作成まず、到着時刻をvarchar型で格納するテーブルを作成します。mysql> create table DemoTable1591 -> ( -> ArrivalTime varchar(20) -&