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