Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MySQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=21)
-   -   Consulta con la funcion CONCAT (https://www.clubdelphi.com/foros/showthread.php?t=68063)

flystar 21-05-2010 21:13:40

Consulta con la funcion CONCAT
 
Buenos días:

Estoy desarollando un sistema con Delphi y estoy conectandome a una BD MYSQL con los componentes MYDAC de DEVART, son famosos.

Resulta que cuando hago una consulta con esta:

Select concat(nombre,' ',ApellidoP,' ', ApellidoM,' ') as NombreCompleto
from tablanombres

Pues el resultado es que aparece un listado con una columna "NombreCompleto" con el nombre completo de la persona por que concatena los campos nombre, ApellidoP y ApellidoM y ademas pone un espacio entre ellos. Eso es normal y facil de entender.

LO curioso es que si por alguna razòn la columna ApellidoP en algunos de sus registros no tiene ningun valor entonces en Delphi...el valor de NombreCompleto aparece totalmente vacio.
Si hacemos una prueba directa de esa consulta sobre MYSQL el valor de NombreCompleto si aparece completo...es decir...solo omite el ApellidoP como es de esperarse pero si muestra el Nombre y el ApellidoM, esta raro
El componente que uso es el Tquery

Alguien sabe por que? Gracias.:confused::eek:

rgstuamigo 21-05-2010 23:27:15

Es bastante raro lo que mencionas, en lo personal uso mas que todo los componentes Zeos que son libres y gratuitos y no solo sirven para MySQL sino tambien para otros servidores; pero tambien tengo instalado los componentes MyDac y he hecho la prueba y todo ha ido bien, aunque la version que tengo instalada de MyDac es "mydac.v5.20.1.14" y mi versión de MySQL es 5.0.37 .;)
De todas formas si tu version de MyDac es superior o inferior puede que sea un Bug.;)
Saludos...:)

flystar 23-05-2010 02:44:28

La solucion
 
Resulta que si hay campos de una base de datos que contengan valores NULL
la concatenación no se realiza por la función CONCAT en MYSQL.

Para lograrlo en tal caso se puede usar una funcion llamada:COALESCE

Si encuentra un valor nulo lo sustituye por el valor indicado, entonces quedaría la consulta así:

SELECT idprospecto, razonsocial, concat(COALESCE(ApellidoP," "),' ',COALESCE(ApellidoM," "),' ', COALESCE(Nombre," ")) as ajasNombre, RFC FROM prospectos order by razonsocial

En este caso si encuentra valores null, los sustituye por un espacio.

:D:D:D:D Esa es la solución.


La franja horaria es GMT +2. Ahora son las 07:31:11.

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