Re:

From: Álvaro Hernández Tortosa <aht(at)Nosys(dot)es>
To: Néstor Seguí Martínez <nessemar(at)hotmail(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re:
Date: 2011-05-23 14:44:02
Message-ID: 20110523144402.GH1033@nosys.net
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Mon, May 23, 2011 at 02:28:13PM +0200, Néstor Seguí Martínez escribió:

>
>Buenas, quería comentaros un problema con el que me estoy encontrando y que (pese a que probablemente sea una tontería) me está llevando de craneo:
>Tengo una función con la que pretendo comprobar que el primer carácter de un campo textual sea 'F'. La función tiene este código:
>BEGIN EXECUTE 'select substring(s1.'|| $2||'::text from '|| $4||' for '|| $5||') from '|| $1||' as s1 where s1.gid='|| $3||' and substring(s1.'|| $2||'::text from '|| $4||' for '|| $5||')='''|| $6||'''::text;'; IF FOUND THEN RETURN true; ELSE RETURN false; END IF;END;
>Y la llamada la realizo tal que así: select devuelve_booleano('x2bis','txt', '5', '1','1','F')
>La explicación de los parámetros:
>/*Comprueba en el registro $3 del campo textual $2 de la tabla $1*//*si los $5 siguientes carácteres a la posición $4*//*coincide con el valor $6*/
>--------------------------------------------------------------------------------------------------------------------------------------------------------------
>Para el caso particular de esta query: select substring(s1.txt::text from 1 for 1) from x2bis as s1 where s1.gid=5 el resultado es 'F'
>Pero la función me está devolviendo 'false' en todo momento independientemente del carácter que tenga que buscar en el parámetro 6º
>¿Alguien sabe que puedo estar haciendo mal?
>Gracias por la ayuda.

Hola, Néstor.

Yo haría una función independiente de las tablas (que la función
no extraiga de tablas), porque así es más portable (puedes usarlo en
datos que no provengan de tablas) y mucho más sencillo. Por ejemplo:

CREATE FUNCTION starts_with (text, char(1)) RETURNS boolean AS $$
SELECT $2 = substring($1, 1, 1)
$$ LANGUAGE SQL;

Y se puede usar sin tabla:

=> SELECT starts_with('Funcion', 'F');
starts_with
-------------
t
(1 row)

O con una tabla cualquiera, pasándole la columna como primer argumento y
usarlo en cualquier expresión de la consulta.

Luego puedes ir mejorando la función, con más parámetros, si lo
deseas.

Espero que te sea de utilidad. Saludos,

Álvaro

--

Álvaro Hernández Tortosa

-----------
NOSYS
Networked Open SYStems

In response to

  • at 2011-05-23 12:28:13 from Néstor Seguí Martínez

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Guillermo Villanueva 2011-05-23 14:46:34 mejorar performance de select
Previous Message Néstor Seguí Martínez 2011-05-23 12:28:13