only not group_concat concat_ws mysql sql null concat

group_concat - mysql concat if not null



MySQL CONCAT devuelve NULL si algĂșn campo contiene NULL (6)

Tengo los siguientes datos en mi tabla "dispositivos"

affiliate_name affiliate_location model ip os_type os_version cs1 inter Dell 10.125.103.25 Linux Fedora cs2 inter Dell 10.125.103.26 Linux Fedora cs3 inter Dell 10.125.103.27 NULL NULL cs4 inter Dell 10.125.103.28 NULL NULL

Ejecuté debajo de la consulta

SELECT CONCAT(`affiliate_name`,''-'',`model`,''-'',`ip`,''-'',`os_type`,''-'',`os_version`) AS device_name FROM devices

Devuelve el resultado dado a continuación

cs1-Dell-10.125.103.25-Linux-Fedora cs2-Dell-10.125.103.26-Linux-Fedora (NULL) (NULL)

Cómo salir de esto para que ignore el resultado NULL AND debe ser

cs1-Dell-10.125.103.25-Linux-Fedora cs2-Dell-10.125.103.26-Linux-Fedora cs3-Dell-10.125.103.27- cs4-Dell-10.125.103.28-


CONCAT_WS todavía produce null para mí si el primer campo es nulo. Lo resolví agregando una cadena de longitud cero al principio como en CONCAT_WS ("", affiliate_name , ''-'', model , ''-'', ip , ''-'', os_type , ''-'', os_version ) sin embargo CONCAT ("" , affiliate_name , ''-'', model , ''-'', ip , ''-'', os_type , ''-'', os_version ) produce nulo cuando el primer campo es nulo.


Para tener la misma flexibilidad en CONCAT_WS que en CONCAT (si no desea el mismo separador entre cada miembro, por ejemplo) use lo siguiente:

SELECT CONCAT_WS("",affiliate_name,'':'',model,''-'',ip,... etc)


Use CONCAT_WS en CONCAT_WS lugar:

CONCAT_WS () no omite cadenas vacías. Sin embargo, omite cualquier valor NULL después del argumento separador.

SELECT CONCAT_WS(''-'',`affiliate_name`,`model`,`ip`,`os_type`,`os_version`) AS device_name FROM devices


convierte los valores NULL con cadena vacía envolviéndolo en COALESCE

SELECT CONCAT(COALESCE(`affiliate_name`,''''),''-'',COALESCE(`model`,''''),''-'',COALESCE(`ip`,''''),''-'',COALESCE(`os_type`,''''),''-'',COALESCE(`os_version`,'''')) AS device_name FROM devices


puedes usar la instrucción if como abajo

select CONCAT(if(affiliate_name is null ,'''',affiliate_name),''- '',if(model is null ,'''',affiliate_name)) as model from devices


SELECT CONCAT(isnull(`affiliate_name`,''''),''-'',isnull(`model`,''''),''-'',isnull(`ip`,''''),''-'',isnull(`os_type`,''''),''-'',isnull(`os_version`,'''')) AS device_name FROM devices