Re: Manejo de strings en consulta

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

In response to

Responses

Browse pgsql-es-ayuda by date

  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...