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?
vBulletin v3.6.8, Derechos ©2000-2024, Jelsoft Enterprises Ltd.