PDA

Ver la Versión Completa : Concatenar campos


mosorio
19-06-2003, 18:40:44
Hola,
Quiero hacer una concatenación de campos en firebird 1.0.1 como aparece en el libro de la cara oculta de delphi y no me sale ningún dato, lo otro curioso es que con el iboconsole cuando utilizo el concatenador no lo reconoce. No se si es que lo hago mal o en firebir es dif. a ib la concatenacion.

el ejemplo aparece asi:


select cliente, telefono ||' '|| fax as telefonos from clientes


Con comillas simples o dobles he intentado hacerlo.

Gracias de antemano.

kinobi
19-06-2003, 19:32:00
Hola,

si alguno de los dos campos contatenados es NULL, la concatenación de ambos es NULL.

Saludos.

mosorio
20-06-2003, 11:35:02
Hola kinobi,
He realizado nuevamente la consulta hoy y me he encontrado con la sorpresa de que si funciona, a pesar de que dices que si uno de los campos es nulo el resultado es nulo. Las pruebas las hago con firebird e iboconsole.


select
cliente, telefono1 ||' - '|| telefono2 ||' - '|| fax
from
clientes

Los dos primeros campos si tienen información, pense que podría pasar algo, y he eliminado el segundo campo y solo he realizado la ocnsulta con el primero y el último y ha dado la respuesta que esperaba, solo el primer dato.

Me podrías decir que puede suceder o estar sucediendo con las respuestas de las consultas, si se pude detectar alguna anomalía en el motor??

La versión que tengo de firebird es: WI-T1.5.0.3233
Pero la que tengo en casa es otra, creo que es la 1.0.3 ó 1.0.1

Gracias

kinobi
20-06-2003, 12:38:22
Hola,

Posteado originalmente por mosorio
He realizado nuevamente la consulta hoy y me he encontrado con la sorpresa de que si funciona, a pesar de que dices que si uno de los campos es nulo el resultado es nulo.

Yo no he dicho que no funcionase, lo que he dicho es que la concatenación de dos campos, en los que uno de ellos (o los dos) tenga valor nulo (NULL), da como resultado de la concatenación el valor nulo (NULL).

No es algo que ocurra sólo con el operador de concatenación (||), ocurre con cualquier otro operador y tipo de datos de los operandos. Ej. si sumas un par de campos enteros en los que uno de los operandos sea nulo (NULL), el resultado de la suma será también nulo (NULL).

Vamos, que no es que no funcione, al contrario, es que funciona así. Recuerda que el valor nulo (NULL) no es ausencia de valor, su significado es que se desconoce el mismo.

Saludos.

guillotmarc
20-06-2003, 22:08:25
Hola

Como comenta kinobi, el estándar SQL indica que el resultado de operar con dos valores, en los que uno de ellos sea Null, da Null.

Por eso la solución al problema pasa por utilizar un UDF para convertir el valor Null en una cadena vacía (creo que en la fbudf.dll tienes una función de este tipo llamada NVL), o bien pasar a Firebird 1.5, donde se soporta la función COALESCE que soluciona este problema, en concreto se utilizaría :

COLAESCE(Campo1, '') || COALESCE(Campo2, '')

NOTA : La función COALESCE devuelve el primer valor no nulo, de una lista de valores.

Saludos.

fjolivares
06-04-2004, 12:21:40
Es posible utilizar la funcion coalesce con parametros?

lo intento usar pero da error.

Saludos y gracias.

guillotmarc
06-04-2004, 17:37:29
Hola.

Esta función solo está disponible en Firebird 1.5

Saludos.