Yoel Mc Lennan escribió:
Hola,
> Buenas, alguna idea de como concatenar un string con un boolean ?
>
> eJ :
> nombre varchar;
> propio bool;
> dato vacrhar;
>
> propio=false;
>
>
> dato := nombe || propio (aparentemente no se puede)
En 8.3 funciona bien:
alvherre=# select 'hola'::text || 't'::bool;
?column?
----------
holatrue
(1 ligne)
Pero en 8.2 falla:
alvherre=# select 'hola'::text || 't'::bool;
ERROR: operator does not exist: text || boolean
LINE 1: select 'hola'::text || 't'::bool;
^
HINT: No operator matches the given name and argument type(s). You may need to
add explicit type casts.
El experimento obvio seria aplicar un cast a texto, pero no funciona:
alvherre=# select 'hola'::text || 't'::bool::text;
ERROR: cannot cast type boolean to text
LINE 1: select 'hola'::text || 't'::bool::text;
^
Lo que puedes hacer es convertir el booleano a cstring usando la funcion
boolout(), y luego el cstring a texto usando la funcion textin(), de la
siguiente forma:
alvherre=# select 'hola'::text || textin(boolout('t'::bool));
?column?
----------
holat
(1 row)
Observa que la representacion en texto del booleano es distinta en 8.2
(una sola letra, t o f) que en 8.3 ("true" o "false"). Si quieres hacer
algo mas complicado necesitaras un CASE.
--
Alvaro Herrera http://www.amazon.com/gp/registry/5ZYLFMCVHXC
"Cómo ponemos nuestros dedos en la arcilla del otro. Eso es la amistad; jugar
al alfarero y ver qué formas se pueden sacar del otro" (C. Halloway en
La Feria de las Tinieblas, R. Bradbury)
--
TIP 8: explain analyze es tu amigo