人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

mysqlでの50音順ソート(濁音・半濁音など)

以下の様なテーブルがあります。

SELECT kana FROM table_name ORDER BY kana
とした場合、先に清音が来て、その後に濁音や半濁音を含む文字が並ぶ序列になります。

kana
----------
シシトウ
シンポ
ジゴク
ジドウシャ
----------

となるのですが、これを

kana
----------
ジゴク
シシトウ
ジドウシャ
シンポ
----------

以下の様な形に濁音・半濁音を無視した形に序列化したいと考えています。
どのような方法がありますでしょうか?

●質問者: jamis
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● sasada
●30ポイント

むりやりユーザー定義関数(UDF)を作ってしまう方法があります。
http://d.hatena.ne.jp/download_takeshi/20071124/1195915196


濁音・半濁音を清音に直して重み付けをする関数seion_yomi()を作って、

SELECT kana FROM table_name ORDER BY seion_yomi(kana) ASC

とすればお望みの結果が得られると思います。

下記URLに「アルファベットの文字列をひらがな順にソートする」例があります。
ソースコードもダウンロードできますので、これを参考にトライしてみては如何でしょうか。
http://fukaoi.org/2009/06/14/mysql_udf_alpha_to_hiragana


jamisさんのコメント
回答ありがとうございます。 なるほど、SQLでも独自に関数をつくる事ができるんですね。 Cを書く事ができないので、ちょっと私のレベルでは実現まで時間がかかりそうです。

2 ● a-kuma3
●70ポイント ベストアンサー

COLLATE 節を使うと、以下のように書けます。

SELECT kana
 FROM table_name
 ORDER BY kana COLLATE utf8_unicode_ci;

SQL Fiddle というところで、試してみたのがこちら。
http://sqlfiddle.com/#!2/0a4e9/4

COLLATE 節についての、MySQL のマニュアルは、こちらです。
http://dev.mysql.com/doc/refman/5.1/ja/charset-collate.html

ただ、質問に書いてある内容だけではなくて、「シ」と「ジ」だけではなく「し」や「じ」も順序が同一視されます。
http://d.hatena.ne.jp/end0tknr/20100613/1276427626

もし、カタカナの読みしか入らない、というカラムだったら、COLLATE utf8_unicode_ci が使えると思います。


jamisさんのコメント
回答ありがとうございます。 完璧でした。 求めていたものができました。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ