Re: Manejo de strings en consulta

From: Alvaro Herrera <alvherre(at)commandprompt(dot)com>
To: Gustavo <gustavor(at)intercomgi(dot)net>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Manejo de strings en consulta
Date: 2008-01-11 19:44:17
Message-ID: 20080111194417.GA8260@alvh.no-ip.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

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.

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2008-01-11 20:33:37 Re: Variables Dinamicas
Previous Message Raul Andres Duque 2008-01-11 18:48:11 Re: Como hago un job en postgres?