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)
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