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