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

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

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

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