[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 メーリングリストの案内