[pgsql-jp: 33956] Re: 五十音順検索

icc10325 @ nifty.com icc10325 @ nifty.com
2004年 9月 1日 (水) 19:58:36 JST


お世話になります。 マメ太です。

早速のご返答ありがとうございます。

> 名無しさんへ
> 
> > テーブル内に全角カタカナのみが入力されたカラム(カラム名例:hurigana)
> > が存在して、そのカラムのデータに対して五十音検索を行いたいと考えており
> > ます。
> > (ア行・カ行・・・)
> 
> 識者はもっとエクセレントな書き方をするでしょうが自分なら、
> # 文字コードの問題(install方法/入力値)は無視できることが条件ですが
> 
> (1)LIKEで頑張る
> 
> => SELECT * FROM table WHERE hurigana LIKE 'ア%';
> => SELECT * FROM table WHERE hurigana LIKE 'ア%' OR hurigana LIKE 'カ%';
> 
> (え?美しくない?)

説明足らずで申し訳ありません。
「*行」のような検索をしたいので、「ア行」の場合は「アイウエオ」で始ま
るデータが取得したく、上記の方法では無理だと認識しています。

しかも「ア行」と言われたら「ァィゥェォ(全角カタカナのア行小文字?)」
も一応考えないといけないかも?・・・とか考えるとパニック状態です・・・


> (2)テーブル設計に手を加える
> 
> テーブル設計段階で頭文字(kashiramoji)を準備あるいはALTER TABLE
> で追加して、
> 
> => SELECT * FROM table WHERE kashiramoji in ('ア','カ'...);
> 
> とか。もちろん in を使わずに
> 
> => SELECT * FROM table
> -> WHERE kashiramoji = 'ア' OR kashiramoji = 'カ' ...;
> 
> でも構いません。

DB構造は既に変更不可能状態なので、この手法も無理です・・・

> (3)テーブル設計を変更したくないけど(2)の方式
> 
> => SELECT t.*
> -> FROM (SELECT substr(hurigana,1,1) as kashiramoji ,* FROM table) t
> -> WHERE t.kashiramoji in ('ア',...);

私がスマートじゃないと思ってコーディングした方法が(ア行の場合)、

SELECT * 
FROM aaa 
WHERE substr(hurigana,1,1) IN ('ア','イ','ウ','エ','オ','ァ','ィ','ゥ','ェ','ォ
');

のようなSQLです。
正規表現で可能なのかな?と思ったのですが、私は正規表現に関して無知なの
と、上述のように「ハヒ・・・」「バビ・・・」「パピ・・・」で文字コード範囲がばらける
んじゃないかな?と素人考えで諦めた次第です。



以上、もし何かいいお知恵があればご教授下さい。




pgsql-jp メーリングリストの案内