[pgsql-jp: 31433] Re: like文で対象文字列に\ が入っている場合

Yoshihiro Nishio nishio @ winsystem.jp
2003年 11月 11日 (火) 18:45:40 JST


西尾です。
ご返答ありがとうございます。

> select * from tableA where name like '%\\\\%';
>
> とする必要があります。
> リテラルとしてのエスケープと、マッチングを行う際のエスケープ
> とで、2回分のエスケープが必要になるからです。
> つまり、SQL中に'%\\\\%'と書くと、それはパーサによって'%\\%'
> という文字列と解釈され、さらにlike式のパターンとして解釈され
> る際に'%\%'となるわけです。

なるほど、そういうことだったんですね。理解できました。

> あるいは、ESCAPE句を使って、
>
> select * from tableA where name like '%\\%' escape '';
>
> などとする手もあります。
> ESCAPE句の意味についてはマニュアル等を参照して下さい。

http://www.postgresql.jp/document/pg734doc/user/functions-matching.html#FUNCTIONS-LIKE
でしょうか。

やりたいことはphpでPOSTされた値をlike検索するというものです
ので、POSTされた値に\\,%,_があれば\\をつけるようにして対処
してみます。

有り難うございましたm(_ _)m




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