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


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

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

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

となるのですが、これを

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

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

回答の条件
  • 1人1回まで
  • 登録:
  • 終了:2014/09/11 16:01:17
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:a-kuma3 No.2

回答回数4973ベストアンサー獲得回数2154

ポイント70pt

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 が使えると思います。

id:jamis

回答ありがとうございます。

完璧でした。
求めていたものができました。

2014/09/11 16:00:53

その他の回答1件)

id:sasada No.1

回答回数1482ベストアンサー獲得回数133

ポイント30pt

 むりやりユーザー定義関数(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

id:jamis

回答ありがとうございます。

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

2014/09/11 12:06:47
id:a-kuma3 No.2

回答回数4973ベストアンサー獲得回数2154ここでベストアンサー

ポイント70pt

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 が使えると思います。

id:jamis

回答ありがとうございます。

完璧でした。
求めていたものができました。

2014/09/11 16:00:53

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません