アプリ版:「スタンプのみでお礼する」機能のリリースについて

PostgreSQLで検索をすると濁点や半濁点もヒットしてしまいます。
「%カルヒ」で、「カルビスープ」も「カルピス」もヒットしてしまいます。

データべースは下記の通り作成しました。
CREATE DATABASE testdb
WITH OWNER = postgres
ENCODING = 'UTF8'
TABLESPACE = pg_default
LC_COLLATE = 'Japanese_Japan.932'
LC_CTYPE = 'Japanese_Japan.932'


PostgreSQLにて検索で濁点や半濁点をヒットさせない方法はありますか?

A 回答 (3件)

ひょっとしてカタカナの部分は元々半角文字で、


質問を投稿する際に全角になってしまっているのでしょうか?

そうであれば濁点も半濁点も1文字ですので、
LIKE1回で絞り込むことはできないような気がします。
チルダをつかって正規表現でマッチさせるのではだめでしょうか?

column_1 ~ 'カルヒ([^゛゜].*)?$'
    • good
    • 0
この回答へのお礼

お忙しいところ、いつもありがとうございます。

正規表現でうまくいきました!!
column_1 ~ 'カルヒ[^゛゜]'

お礼日時:2013/08/15 17:46

こちらこそ、検証不足のまま回答してしまい申し訳ありません。


手元に環境がないので確認不足ではありますが、
以下で再度ご確認いただけるでしょうか。

like 'カルヒ%' COLLATE "C"

"C"の部分は環境によって変更する必要があるかもしれません。

参考URL:http://www.postgresql.jp/document/9.1/html/xfunc …

この回答への補足

お忙しいところ、ご回答ありがとうございます。

like 'カルヒ%' COLLATE "C"
で試してみましたが、動作結果は同じく、「カルビスープ」も「カルピス」もヒットしてしまいました。

補足日時:2013/08/08 17:07
    • good
    • 0

PostgreSQLのバージョンが不明ですが。



デフォルトの日本語ロケール(Japanese_Japan.932)では、
静音、濁音、半濁音の区別ができないようです。

手っ取り早く検索をヒットさせるのであれば、
バイナリとして部分検索すればうまくいくかと思います。

like binary 'カルヒ%'

恒久的に対応するならば、ロケールを変更する必要があるようです。
詳細については、参考URLをご参照ください。

参考URL:http://lets.postgresql.jp/documents/technical/te …

この回答への補足

早急なご回答、ありがとうございます。とても助かります。
すいません。バージョンは、9.2.4です。

like binary 'カルヒ%'
を試してみたのですが、「型"binary"は存在しません」となり実行できませんでした。
以下も試したのですがエラーでした。使い方が悪いのでしょか?
like binary 'カルヒ%'::bytea

ERROR: 演算子が存在しません: character varying ~~ bytea
SQLステート:42883
ヒント:指定名称、指定引数型に合う演算子がありません。明示的な型キャストが必要かもしれません

補足日時:2013/08/07 18:40
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す