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

Jun Kitamura kitamura @ zoozee.jp
2004年 9月 1日 (水) 21:00:02 JST


北村です。

> 私がスマートじゃないと思ってコーディングした方法が(ア行の場合)、
> 
> SELECT * 
> FROM aaa 
> WHERE substr(hurigana,1,1) IN ('ア','イ','ウ','エ','オ','ァ','ィ','ゥ','ェ','ォ
> ');
> 
> のようなSQLです。
> 正規表現で可能なのかな?と思ったのですが、私は正規表現に関して無知なの
> と、上述のように「ハヒ・・・」「バビ・・・」「パピ・・・」で文字コード範囲がばらける
> んじゃないかな?と素人考えで諦めた次第です。

私も正規表現は無知なので、もしかしたら正規表現の方が良い解な
のかもしれません。

「ハヒ・・・」「バビ・・・」「パピ・・・」が、「ハ行」「バ行」
「パ行」という3種ならば、以下は無用です。

文字コード表(http://ash.jp/code/unitbl21.htm)を見ると、並び
がハッキリしているので、「アイウエオァィゥェォ」=「ア行」で
あるならば、
SELECT * FROM aaa 
WHERE substr(hurigana,1,1) between 'ァ' and 'オ';
で OK です。
カ行は、
SELECT * FROM aaa 
WHERE substr(hurigana,1,1) between 'カ' and 'ゴ';
となります。
ハ行(バ行、パ行、含む)
SELECT * FROM aaa 
WHERE substr(hurigana,1,1) between 'ハ' and 'ポ';
ですね。

あとは、substr(hurigana,1,1) を関数インデックスにしてしまえ
ば、良いのでは。
create index aaa_fstchr on aaa ((substr(hurigana,1,1)));
括弧がひとつ余分なような気がしますが、関数インデックスの場合、
括弧が余計に1つ必要です(違ったらごめんなさい)。

でわでわ。




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