[pgsql-jp: 26539] Re: % で始まる文字の LIKE 検索

ISHIDA Akio iakio @ pjam.jpweb.net
2002年 6月 29日 (土) 18:54:18 JST


こんにちは。石田@苫小牧市です。

On Sat, Jun 29, 2002 at 05:08:20PM +0900, Hajime Lucky Okada wrote:
> 岡田と申します。 お世話になっております。
> 
> さて、半角 % で始まる(を含んだ)テキストの LIKE 検索で、
> 私の理解が間違っているのか期待している結果を返してくれません。
> ご教授頂けますでしょうか。
> 
> 
> そこで、、、「4.5.1. LIKE述語を使用したパターンマッチング」
> http://osb.sra.co.jp/PostgreSQL/Manual/PostgreSQL-7.1-ja/functions-matching.html
> に基づき、「アンダースコアやパーセント記号そのものをパターンマッチさせたい場合は
> patternの文字1字づつエスケープ文字で 指定する必要があります。」ということで、
> '%' 自身を表すため \ でエスケープさせ '\%'、不定文字列を表すため '%' を付加して
> 検索してみます。
> 
> mountdb=# select * from aaa where content like '\%%';

リテラル文字列内での '\' が特殊な意味を持つからでしょう。
'\' を2つならべて、
=> select * from aaa where content like '\\%%';
ではどうでしょうか?

あるいは escape 文字を変えて、
=> select * from aaa where content like '#%%' escape '#';
などでもよさそうです。

> おっと偶然、% の次の文字 t を思い出したとして、
> 
> mountdb=# select * from aaa where content like '\%t%';
>  id | content
> ----+---------
>   2 | %test
> (1 row)
> 
> とすれば、期待値が出てきました。

たぶんこちらは、 '%t%' と解釈されると思います。
'atest' などにもマッチしますね。

-- 
ISHIDA Akio




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