Javaソート豆知識
投稿者: K.M
日付: 2007-09-26 23:57
日付: 2007-09-26 23:57
下記Gさんの過去メールを抜粋
お疲れ様です、Gです。
こっちはその2です。
今度は少し難易度が上がります。その分、使用頻度も減ります。
こっちはその2です。
今度は少し難易度が上がります。その分、使用頻度も減ります。
いつも大変お世話になっております。
Gです。
Gです。
使い慣れると意外と手軽なJavaソート。
昔は自分でソートアルゴリズム書いてましたよ。
(大学で習った講義の中で社会に出てから、一番役に立ったのはアルゴリズムだな~。まともに聞いてなかったけど)
昔は自分でソートアルゴリズム書いてましたよ。
(大学で習った講義の中で社会に出てから、一番役に立ったのはアルゴリズムだな~。まともに聞いてなかったけど)
ま、そんなJavaソートですが、漢字を含んだ文字列は文字コード順、
オラクルSQLのORDERBY句によるソートは音読み順となってソートが行われるようです。
オラクルSQLのORDERBY句によるソートは音読み順となってソートが行われるようです。
例:文字配列 "0","世","中\","1" があった場合、
- オラクルのORDERBY句
"0","1","世","中\"
- javaソート
"0","1","中\","世"
となってしまいます。
これは文字コードソートの仕様だそうで、回避方針は調べた限り見つかりませんでした。
これは文字コードソートの仕様だそうで、回避方針は調べた限り見つかりませんでした。
(ちなみに↑の例にてエクセル2003でデータの並び替えを行った場合Javaソートと同じ結果となりました)
漢字のソートを行いたい場合、SQLのソートを利用する
又は、文字コード順によるソートとなる事を事前に確認することが必要なようです。
ちなみに、ソートが食い違うのは漢字のみで英数や平仮名カタカナのソートは文字コードの関係上、なんとかなるかもしれません。
(一応正規表現とほぼ同じ順序で並んでるので)
又は、文字コード順によるソートとなる事を事前に確認することが必要なようです。
ちなみに、ソートが食い違うのは漢字のみで英数や平仮名カタカナのソートは文字コードの関係上、なんとかなるかもしれません。
(一応正規表現とほぼ同じ順序で並んでるので)
参考サイト
http://www.asahi-net.or.jp/~DP8T-ASM/java/tips/I18NStringCollation.html
http://otndnld.oracle.co.jp/products/database/oracle10g/application_development/pdf/TWP_Sorting_10gR1.pdf
http://otndnld.oracle.co.jp/products/database/oracle10g/application_development/pdf/BWP_Power_of_Globalization_Technology_10gR2.pdf
http://www.asahi-net.or.jp/~DP8T-ASM/java/tips/I18NStringCollation.html
http://otndnld.oracle.co.jp/products/database/oracle10g/application_development/pdf/TWP_Sorting_10gR1.pdf
http://otndnld.oracle.co.jp/products/database/oracle10g/application_development/pdf/BWP_Power_of_Globalization_Technology_10gR2.pdf
以上、情報共有でした。
客先からよく来るんですよね、この要望。
ソートを行うときSQLだとおっそいから、DBアクセスしないようにしてくれ。とかそんなんが。
その場合、文字コード順になりますよ。と一言、釘を刺しておきましょう。
ソートを行うときSQLだとおっそいから、DBアクセスしないようにしてくれ。とかそんなんが。
その場合、文字コード順になりますよ。と一言、釘を刺しておきましょう。