Обсуждение: Regular expressions or LIKE ? HELP needed !
Hi,
I have a little trouble ... my level with regular expression is not at
the top ... but I found two troubles and may I do not use them well ...
may be it's another things not detailed in any documentation of
PostgreSQL ...
Case 1 :
select name block where code ~* 'lower(';
ERROR: Invalid regular expression: parentheses ( ) not balanced
select name block where code ~* 'lower\(';
ERROR: Invalid regular expression: parentheses ( ) not balanced
How to escape a "(" ??
Case 2 :
select name from block where code ilike '%lower(%';
This is running ... ;)
But I want to find a text inside my field code having : lower(' inside
with the quote ("'") code at the end ... ok ?
So I thought I have to double the quote like this ... I have no result
... but I know result exists !
select name from block where code ike '%lower(''%';
I have also tried :
select name from block where code ike '%lower(\'%';
Same thing ... no result ... but I'm sure I have some !
Any idea how to escape the quote caracter in a LIKE ?
Many thanks for you help !
Regards,
--
Hervé Piedvache
Elma Ingenierie Informatique
6, rue du Faubourg Saint-Honoré
F-75008 - Paris - France
http://www.elma.fr
Tel: +33-1-44949901
Fax: +33-1-44949902
Email: herve@elma.fr
> How to escape a "(" ??
select name block where code ~* 'lower\\(';
First, you have to escape the '(' in order to make regexps match the bracket
instead of using it as a grouping operator.
And then you have to escape the escape in order to get it passed to the regexp
system (at least with psql).
> select name from block where code ike '%lower(''%';
Works for me in 7.2.1 (ike should be ilike). Which postgres version are you
running?
With kind regards / mit freundlichem Gruß
Holger Klawitter
--
Holger Klawitter http://www.klawitter.de
lists@klawitter.de
A safe method that always works is simply to use a
character class, like:
select name block where code ~* 'lower [(]'
--- Holger Klawitter <lists@klawitter.de> wrote:
>
> > How to escape a "(" ??
>
> select name block where code ~* 'lower\\(';
>
> First, you have to escape the '(' in order to make
> regexps match the bracket
> instead of using it as a grouping operator.
>
> And then you have to escape the escape in order to
> get it passed to the regexp
> system (at least with psql).
>
> > select name from block where code ike
> '%lower(''%';
>
> Works for me in 7.2.1 (ike should be ilike). Which
> postgres version are you
> running?
>
> With kind regards / mit freundlichem Gru�
> Holger Klawitter
> --
> Holger Klawitter
> http://www.klawitter.de
> lists@klawitter.de
>
> ---------------------------(end of
> broadcast)---------------------------
> TIP 3: if posting/reading through Usenet, please
> send an appropriate
> subscribe-nomail command to majordomo@postgresql.org
> so that your
> message can get through to the mailing list cleanly
__________________________________________________
Do You Yahoo!?
Yahoo! Health - Feel better, live better
http://health.yahoo.com
> A safe method that always works is simply to use a
> character class, like:
>
> select name block where code ~* 'lower [(]'
But be warned when trying to match a closing Bracket :-)
With kind regards / mit freundlichem Gruß
Holger Klawitter
--
Holger Klawitter http://www.klawitter.de
lists@klawitter.de
Hi Holger,
Holger Klawitter a écrit :
>
> > How to escape a "(" ??
>
> select name block where code ~* 'lower\\(';
>
> First, you have to escape the '(' in order to make regexps match the bracket
> instead of using it as a grouping operator.
>
> And then you have to escape the escape in order to get it passed to the regexp
> system (at least with psql).
OK thanks !
> > select name from block where code ike '%lower(''%';
>
> Works for me in 7.2.1 (ike should be ilike). Which postgres version are you
> running?
ilike yes loose something in copy/paste ;)
I'm using 7.2.1 ... and it's running ... I find the mistake ... the data
are escaped in the database so I have to do :
select name from block where code ilike '%lower(\\\\''%';
regards,
--
Hervé Piedvache
Elma Ingenierie Informatique
6, rue du Faubourg Saint-Honoré
F-75008 - Paris - France
http://www.elma.fr
Tel: +33-1-44949901
Fax: +33-1-44949902
Email: herve@elma.fr