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

TAKAISHI Hayato rio-t @ presen.to
2003年 11月 11日 (火) 03:38:09 JST


こんにちは、高石です。

From: "Yoshihiro Nishio" <nishio @ winsystem.jp>
Subject: [pgsql-jp: 31426] like文で対象文字列に\ が入っている場合

> like文で対象文字列に\が入っている場合にはどのようなSQL文を書けばいいのでしょ
> うか?
> 
> tableA
> id|name
> --|-----
> 1|\
> 2|aaa\\aaa
> 
> select * from tableA where name like '%\\%';
> (0 rows)

この場合、

select * from tableA where name like '%\\\\%';

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

あるいは、ESCAPE句を使って、

select * from tableA where name like '%\\%' escape '';

などとする手もあります。
ESCAPE句の意味についてはマニュアル等を参照して下さい。
/--------------------------------------------------------/
  高石 勇人 < rio-t @ presen.to >
  PGP Key(RSA): http://rio-t.presen.to/pgp/mykey.asc
         (DSS): http://rio-t.presen.to/pgp/mykey-dss.asc
/--------------------------------------------------------/



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