concatenar con valores nulos en mysql – php mysql

Pregunta:


Tengo lo siguiente:

|ap_pat|ap_mat|pri_nombre|seg_nom|

|Jara  |Rios  |Luis      |ivan   |

|lopez |NULL  |Jorge     |alf    |

Al concatenar con CONCAT o CONCAT_WS me da un espacio de mas entre cada dato si esta NULL me lo muestra asi:

Jara Rios Luis Ivan

Lopez |*| Jorge Alf

Ven que el segundo valor muestra un espacio de mas |*| entre ap_pat y nombre como lo puedo hacer para que omita ese espacio

Preguntado por: Francisco

Hay algo que no has explicado bien, porque el uso de CONCAT_WS con un separador ' ' debería funcionar perfectamente. Por ejemplo, si hacemos la consulta siguiente:

select concat_ws(' ', 'Lopez', null, 'Jorge', 'alf');

El resultado es (Demo):

Lopez Jorge alf

… sin ningún espacio adicional.

Demo más completo

Mi sospecha es que donde piensas que tienes un NULL en realidad tienes una cadena vacía. En ese caso sí te agregaría un espacio de más.

Por ejemplo, si modificamos la consulta a:

select concat_ws(' ', 'Lopez', '', 'Jorge', 'alf');

Entonces el resultado es (Demo):

Lopez  Jorge alf

… ahora sí con un espacio adicional.

Puedes usar la función IFNULL de MySQL. Con esta función puedes retornar un valor alternativo si el dato es NULL:

SELECT
    CONCAT( IFNULL(CONCAT(ap_pat, ' '), ''),
        IFNULL(CONCAT(ap_mat, ' '), ''),
        IFNULL(CONCAT(pri_nombre, ' '), ''),
        IFNULL(seg_nom, '') )

FROM tabla;

En este ejemplo, si alguno de los apellidos o nombres es NULL, mostrará una cadena vacía para ese dato.

Fuente

Tags:,

Add a Comment

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *