【MySQL】CAST関数を使って文字列を数値として並べ替える方法
文字列を数値としてソートするには?
データベースでは、数値がVARCHAR型などの文字列として保存されているケースは少なくありません。このままORDER BYで並べ替えると、辞書順(文字列順)にソートされてしまい、「3, 20, 34」のような期待通りの数値順にならないことがあります。
この問題を解決するには、CAST()関数を使って文字列を数値に変換してからソートします。基本構文は以下のとおりです。
SELECT * FROM テーブル名 ORDER BY CAST(カラム名 AS SIGNED) DESC;
サンプルテーブルの作成
まず、動作確認用のテーブルを作成しましょう。ここではIdカラムをVARCHAR型(文字列型)として定義します。
mysql> create table DemoTable
(
Id varchar(100)
);
Query OK, 0 rows affected (0.18 sec)
テストデータの挿入
INSERTコマンドを使って、いくつかのレコードを挿入します。
mysql> insert into DemoTable values('3');
Query OK, 1 row affected (0.07 sec)
mysql> insert into DemoTable values('20');
Query OK, 1 row affected (0.07 sec)
mysql> insert into DemoTable values('34');
Query OK, 1 row affected (0.06 sec)
mysql> insert into DemoTable values('21');
Query OK, 1 row affected (0.06 sec)
mysql> insert into DemoTable values('78');
Query OK, 1 row affected (0.04 sec)
mysql> insert into DemoTable values('90');
Query OK, 1 row affected (0.07 sec)
登録データの確認
SELECT文ですべてのレコードを表示してみます。
mysql> select *from DemoTable;
実行結果は以下のとおりです。
+------+ | Id | +------+ | 3 | | 20 | | 34 | | 21 | | 78 | | 90 | +------+ 6 rows in set (0.00 sec)
CAST関数で数値として並べ替える
それでは、CAST(Id AS SIGNED)を使って、文字列を符号付き整数に変換したうえで降順にソートしてみましょう。
mysql> select *from DemoTable ORDER BY CAST(Id AS SIGNED) DESC;
実行結果は以下のとおりです。文字列としてではなく、正しく数値の大小順に並んでいることがわかります。
+------+ | Id | +------+ | 90 | | 78 | | 34 | | 21 | | 20 | | 3 | +------+ 6 rows in set (0.02 sec)
補足:その他の方法
CAST()以外にも、同様の目的で使える方法があります。
- CONVERT()関数:
ORDER BY CONVERT(Id, SIGNED)のように記述でき、CAST()とほぼ同じ動作をします。 - 暗黙の型変換:
ORDER BY Id + 0のように数値演算を加えることでも数値順にソートできますが、可読性の面ではCAST()を使う方が明確です。 - インデックスへの影響:CAST()を使用するとインデックスが利用されにくくなるため、大量データを扱う場合は、あらかじめカラムをINT型など適切な数値型で定義しておくことをおすすめします。
-
JavaでMySQLデータベースに接続する方法|JDBC接続の基本を解説
MySQLデータベースへの接続URLJavaからMySQLデータベースに接続するには、JDBC(Java Database Connectivity)ドライバを使用します。まず、接続に必要な情報として、以下のようなURL・ユーザー名・パスワードを用意します。String MySQLURL = jdbc:mysql://localhost:3306/yourDatabaseName?useSSL=false; String databseUserName = yourUserName; String databasePassword = yourPassword;接続URLを構成する各要素の意味
-
MySQLでデータベース内のテーブル数を表示するクエリの書き方
INFORMATION_SCHEMA.TABLESを使ってテーブル数を取得するここでは例として、「WEB」というデータベースを使用しているものとします。このデータベース内に存在するテーブルの総数を調べたい場合、MySQLではINFORMATION_SCHEMA.TABLESを利用するのが便利です。INFORMATION_SCHEMAは、MySQLサーバーが管理しているメタデータ(データベース名、テーブル名、カラム情報など)を格納する仮想データベースであり、これを参照することでスキーマに関する情報をSQLで簡単に取得できます。テーブル数を表示するクエリ「WEB」データベース内のテーブル数を表示す