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

【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型など適切な数値型で定義しておくことをおすすめします。
  1. 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を構成する各要素の意味

  2. MySQLでデータベース内のテーブル数を表示するクエリの書き方

    INFORMATION_SCHEMA.TABLESを使ってテーブル数を取得するここでは例として、「WEB」というデータベースを使用しているものとします。このデータベース内に存在するテーブルの総数を調べたい場合、MySQLではINFORMATION_SCHEMA.TABLESを利用するのが便利です。INFORMATION_SCHEMAは、MySQLサーバーが管理しているメタデータ(データベース名、テーブル名、カラム情報など)を格納する仮想データベースであり、これを参照することでスキーマに関する情報をSQLで簡単に取得できます。テーブル数を表示するクエリ「WEB」データベース内のテーブル数を表示す