Javaで文字列を数字型に変換してソートする方法

@iwasaki 1,107views 更新:2013年11月28日

文字列型の内容を数字型に変換してソートをしたいケースってあるかと思います。

普通に文字列でソートすると

1
10
11
2
21

みたいな順番になってしまうので、これを

1
2
10
11
21

みたいにする方法です。

PostgreSQLだと

cast(カラム名 as integer);

MySQLだと

cast(カラム名 as unsigned);

などのように書くかと思います。プログラム側で分岐させて書くのは煩雑なので以下のようにするとデータベースに依存せずに書けるかと思います。

Database.castToIntRawColumn("カラム名");

実用例

https://github.com/aipocom/aipo/blob/master/portlets/note/src/main/java/com/aimluck/eip/note/NoteSelectData.java#L625

ちなみにAipoの独自クラスです。

  public static String castToIntRawColumn(String column) {
    if (isJdbcMySQL()) {
      return "CAST(" + column + " AS UNSIGNED)";
    } else if (isJdbcPostgreSQL()) {
      return "CAST(" + column + " AS INT)";
    }
    return column;
  }

https://github.com/aipocom/aipo/blob/master/core/src/main/java/com/aimluck/eip/orm/Database.java#L583

ログイン / 新規登録してコメントする

このソースコードをストックして後で利用したり、作業に利用したソースコードをまとめることができます。

こちらもお役に立つかもしれません