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 campos (https://www.clubdelphi.com/foros/showthread.php?t=1586)

mosorio 19-06-2003 18:40:44

Concatenar campos
 
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:

Cita:

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.

Cita:

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,

Cita:

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

parametros con coalesce
 
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.


La franja horaria es GMT +2. Ahora son las 09:20:44.

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