Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   concatenar cadenas y NULL ???????????? (https://www.clubdelphi.com/foros/showthread.php?t=53591)

david_uh 24-02-2008 23:19:12

concatenar cadenas y NULL ????????????
 
HOLA foro estoy trabajanedo con firebird y me pasa el siguiente poblema

como concateno cadenas en una consulta de firebird

Código SQL [-]
 
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í:

Código SQL [-]
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

Código SQL [-]
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
Código SQL [-]
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

Código SQL [-]
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?


La franja horaria es GMT +2. Ahora son las 01:37:11.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi