PDA

Ver la Versión Completa : concatenar cadenas y NULL ????????????


david_uh
24-02-2008, 23:19:12
HOLA foro estoy trabajanedo con firebird y me pasa el siguiente poblema

como concateno cadenas en una consulta de firebird


select nombre || apellidos as cliente from clientes

pero si algunos de los campos es null todo es null como puedo hacer para covertir los null en un espacio vacio
gracias de antemano por cualquier respuesta

Saludos

RONPABLO
25-02-2008, 02:26:51
usa coalesce, es algo así:


select coalesce(nombre,'') || coalesce(' ' || apellidos,'') as cliente from clientes

david_uh
28-02-2008, 01:04:04
Gracias RONPABLO por tu respuesta, hallé una solución expongo lo que hice a continuación por si a alguien le sirve.

Dado que cualquiera de los campos pueden ser nulos lo solucione asi

select coalesce(trim(nombres)||' ','' ) || coalesce(trim(apellidos)||' ','' ) || coalesce(trim(razonsocial)||' ','' ) as cliente from clientes

coalesce toma varios argumentos y devuelve el primero que NO es null por ejemplo coalesce(apellidos,'' )
si apellidos es null entonces devuelve el espacio vacio y si apellidos no es null devuelve el contenido de apellidos.

Uso trim para concatenar si el nombre es null entonces null + ' ' = null y si no es null entocnes devuelve el contenido del campo apellido mas un espacio en blanco para concatenarlo al siguiente campo y asi sucesivamente

mamcx
28-02-2008, 01:41:27
Una mejor solucion es evitar los campos NULL como la plaga.

Es mas simple, es menos bug y es mas predecible. El unico lugar donde un NULL debe existir es cuando necesitas una logica triple (1,0, NULL) para marcar la inexistencia. Que de paso es algo raro. O deberia serlo.

david_uh
28-02-2008, 01:46:26
es mejor asi, el null si no se entiende bien es "impredecible "

RONPABLO
28-02-2008, 01:47:41
yo el trim lo evito haciendo

select coalesce(nombre,'') || coalesce(' ' || apellido1,'') || coalesce(' ' || apellido2,'').....
o mejor dicho al concatener " ' ' || null " el resultado es null, entonces al estar dentro de coalesce(' ' || apellido1,'') y si apellido1 es null coalesce(' ' || null,'') ya me evite el trim

david_uh
28-02-2008, 02:01:31
pasa que algunos ponen en el nombre "juan " y en el apellido " perez " en tonces para que no haya una salida anormal le hago trim

RONPABLO
28-02-2008, 04:38:36
si... muy cierto... yo para evitar eso hago el trim desde el momento de la captura en un onExit del edit ya que luego comparando me trae muchos problemas en la bd

david_uh
29-02-2008, 03:20:23
aunque mejor seria un triger en la base de datos tambien no?