- ベストアンサー
あいまい検索で英文字の全角半角を区別しない
いつもお世話になっております。 あいまい検索で、英文字の全角・半角も区別しないように結果を出したいんですが、どういった方法でできますでしょうか。 大文字小文字の区別なしの曖昧検索だと、 ILIKEという専用演算子を使えばいいとわかったのですが、 全角と半角の区別がついてしまいます。 英文字の全角でも半角でも検索結果をだしたいです。 どなたかご教授お願いいたします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
失礼しました(文面をよく読んでいませんでした)。 半角全角変換関数ですがデータベースがutf8で作成されているのが前提 ですが、plperluを使えば以下のようにできます。 CREATE or REPLACE FUNCTION perl_h2z (varchar) RETURNS varchar AS $$ use utf8; use Unicode::Japanese; my ($a) = @_; if (! defined $a) { return undef; } my $b; $b = Unicode::Japanese->new($a)->h2z->get; return $b; $$ LANGUAGE plperlu; ご参考までに。
その他の回答 (3)
- alte_6
- ベストアンサー率60% (9/15)
ILIKEは大文字小文字同一視で全角半角は不可。 変換は簡単だと思うので自力で関数関数を書けばいいのかもしれませんね 関数の書き方はよくわかりません(補足を・・ //全角英数→半角 条件:( 0xff01<=code<=0xff5e ) 計算:code-0xfee0);
- nora1962
- ベストアンサー率60% (431/717)
Postgresql 7.1以降なら同じく正規表現で「ILIKE」が使えるようです。 http://lib.stwing.jp/archives/2006/12/postgresqlilike.html
- nora1962
- ベストアンサー率60% (431/717)
正規表現を使って"[Aa][Bb][Cc].*" のように比較してみては。
お礼
回答ありがとうございます。 大文字と小文字、たとえば「A」と「a」の区別は出来ましたが、 全角と半角、「A」「A」の区別ができません。 Postgresqlは8.2です。