From: | "Gustavo" <gustavor(at)intercomgi(dot)net> |
---|---|
To: | "Alvaro Herrera" <alvherre(at)commandprompt(dot)com> |
Cc: | <pgsql-es-ayuda(at)postgresql(dot)org> |
Subject: | Re: Manejo de strings en consulta |
Date: | 2008-01-14 12:55:11 |
Message-ID: | 007e01c856ac$b8f9ee50$7901a8c0@Maquina |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
Alvaro, gracias por tu respuesta. Me orientó mucho, aunque aun no puedo
hacer andar la consulta. No soy muy bueno con las expresiones regulares
Estuve averiguando y tengo que escapar todos los caracteres especialesm
salvo / : ? "< > |
Estoy probadno con esta consulta y no se como ahcer para escapar ademas de
las barras los paréntesis. Se me confunde el numero de barras que tengo que
poner. Como tendría que tratar esto???
select
E'C:\\Documents and Settings\\Gustavo\\1)Software Architecture Document.doc'
~
('^' || regexp_replace(E'C:\\Documents and Settings\\Gustavo\\1)',
e'[\\\\]', e'\\\\\\\\', 'g'))
Gracias y saludos
----- Original Message -----
From: "Alvaro Herrera" <alvherre(at)commandprompt(dot)com>
To: "Gustavo" <gustavor(at)intercomgi(dot)net>
Cc: <pgsql-es-ayuda(at)postgresql(dot)org>
Sent: Friday, January 11, 2008 4:44 PM
Subject: Re: [pgsql-es-ayuda] Manejo de strings en consulta
Gustavo escribió:
> Alvaro, va mejorando la cosa, pero todavia no lo puedo hacer andar: Hay un
> problema de escapado que no se como arreglarlo. Estuve buescando en la
> lista y no encontre nada similar.
>
> SELECT * FROM servicio.recurso r WHERE E'C:\\\\Documents and
> Settings\\\\Gustav\\\\Escritorio\\\\TallerUML\\\\12-09\\\)
> Entrega2\\\\Software Architecture Document.doc' ~ ('^'||r.full_path);
>
> Me tira el error
>
> ERROR: invalid regular expression: invalid escape \ sequence
> Estado SQL:2201B
>
> Caluclo que tengo que escapar la columna r.full_path. Como puedo hacer.?
Efectivamente, tienes que escapar. Lo mas obvio es escapar los
backslashes, que puedes hacer asi:
regexp_replace(full_path, e'\\\\', e'\\\\\\', 'g'))
(huh!)
lo cual te daría lo siguiente:
select full_path,
E'C:\\Documents and
Settings\\Gustav\\Escritorio\\TallerUML\\12-09\\Entrega2\\Software
Architecture Document.doc' ~ ('^' || regexp_replace(full_path, e'\\\\',
e'\\\\\\', 'g'))
from recurso;
Ahora, la mala noticia es que además debes escapar otros caracteres,
como *, los paréntesis, el punto, los corchetes, y no sé qué más. Algo
así:
select full_path,
E'C:\\Documents and
Settings\\Gustav\\Escritorio\\TallerUML\\12-09\\Entrega2\\Software
Architecture Document.doc' ~ ('^' || regexp_replace(full_path,
e'([\\\\*.(){}])', e'\\\\\\1', 'g')), ('^' || regexp_replace(full_path,
e'([\\\\*.(){}])', e'\\\\\\1', 'g'))
from recurso;
Ahora falta ver qué otros caracteres deben escaparse ...
www.postgresql.org/docs/current/static/functions-matching.html#FUNCTIONS-POSIX-REGEXP
De una ojeada creo que son (además de los de arriba):
[ + ? ^ $
--
Alvaro Herrera http://www.CommandPrompt.com/
The PostgreSQL Company - Command Prompt, Inc.
--
No virus found in this incoming message.
Checked by AVG Free Edition.
Version: 7.5.516 / Virus Database: 269.19.2/1223 - Release Date: 13/01/2008
20:23
From | Date | Subject | |
---|---|---|---|
Next Message | Alvaro Herrera | 2008-01-14 13:08:51 | Re: Manejo de strings en consulta |
Previous Message | Miguel Rodríguez Penabad | 2008-01-14 12:11:36 | Re: sobre transacciones... |