以下の様なテーブルがあります。
SELECT kana FROM table_name ORDER BY kana
とした場合、先に清音が来て、その後に濁音や半濁音を含む文字が並ぶ序列になります。
kana
----------
シシトウ
シンポ
ジゴク
ジドウシャ
----------
となるのですが、これを
kana
----------
ジゴク
シシトウ
ジドウシャ
シンポ
----------
以下の様な形に濁音・半濁音を無視した形に序列化したいと考えています。
どのような方法がありますでしょうか?
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 が使えると思います。
むりやりユーザー定義関数(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
回答ありがとうございます。
なるほど、SQLでも独自に関数をつくる事ができるんですね。
Cを書く事ができないので、ちょっと私のレベルでは実現まで時間がかかりそうです。
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 が使えると思います。
回答ありがとうございます。
完璧でした。
求めていたものができました。
回答ありがとうございます。
2014/09/11 16:00:53完璧でした。
求めていたものができました。