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

Satoshi Nagayasu snaga @ oak.forus.or.jp
2002年 6月 30日 (日) 16:52:56 JST


永安です。

Naofumi Kondoh wrote:
> ソフト工房の近藤です。こんにちは。

> なるほど。 ¥ をエスケープ文字として使う場合の
> 説明と例題が不足ということですね。

というか、ESCAPE句の使い方の「例」そのものが載ってませんしね。

多分、分かってる人が「説明文」を書くとあのような記述になるんだと
思いますが、初めて読む人には、
「結局のところ正解はどうなるのよ、キーッ!」
となってしまう恐れが。いや、私のことですが…。

最初に質問された岡田さんも、マニュアルはきちんと読んでいたわけで、
そうするとマニュアルの説明が不足なのかな、と。


> ESCAPE 句に指定された文字ととると意味はすっきりするの
> ですが、「変更可能です」とあるから、 ’¥’もエスケープ
> 文字として捉えると、意味がおかしくなりますね。
> 本来の意味は、% が先頭にあるという意味で、 '#' を下記の
> ように使う場合
> 
> pgbash> select * from td where bb like '#%%' escape '#';
>  aa | bb
> ----+-------------
>   1 | %ではじまる
>   9 | %と#の両方
> 
> エスケープ文字自身をパターンに含めるならば「ふたつ続ける」
> といういみですね。'\' エスケープ文字でなければ、わかりや
> すい文章なんだけど、'\'が特殊な扱いなので、たしかに混乱
> するかもしれませんね。
> 
> pgbash> select * from td where bb like '#%%##%' escape '#';
>  aa | bb
> ----+------------
>   9 | %と#の両方
> 

知らなかったです。

というか、まさにこういうのがマニュアルに載ってると嬉しいなー、と。


> > でも実際には「エスケープされたエスケープ文字」が必要なわけですよね?
> 
> それは、'\' の場合だけの特例です。
> 上の例のように、ESCAPE 句に指定した '\' 以外の文字
> なら、単純に2つ続けるだけでその文字自身になります。

むむ。なるほど。

文字列リテラルの中でバッククオートを文字として扱うには、
バッククオート文字を二つ続けなければならない、ということですね。


> '\'がエスケープ文字というのは、PostgreSQL 独自の
> 規格でしょうか?。他のDBはどうですかね。
> 私は、 LIKE .... ESCAPE ... しか使ったことがない
> もので。 ≫ 詳しい方。

ここらへんは、SQLの規格を見てみるしかなさそうですね…。

-- 
NAGAYASU Satoshi <snaga @ oak.forus.or.jp>



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