MySQL CONCAT renvoie NULL pour les champs contenant NULL : solutions et alternatives
La fonction CONCAT de MySQL concatène plusieurs champs en une seule chaîne. Cependant, cela peut être problématique lorsque certains champs contiennent des valeurs NULL, ce qui entraîne le retour de l'expression entière NULL.
Présentation du problème
Considérez le tableau et la requête suivants :
Table: devices | 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 | Query: SELECT CONCAT(`affiliate_name`,'-',`model`,'-',`ip`,'-',`os_type`,'-',`os_version`) AS device_name FROM devices
Cette requête renvoie le nom de l'appareil sous la forme suit :
cs1-Dell-10.125.103.25-Linux-Fedora cs2-Dell-10.125.103.26-Linux-Fedora (NULL) (NULL)
Solution : Remplacez NULL par une chaîne vide
Pour ignorer les valeurs NULL et concaténer des chaînes vides à la place, vous pouvez utiliser la fonction COALESCE. COALESCE prend plusieurs arguments et renvoie le premier argument non NULL.
Voici la requête modifiée :
SELECT CONCAT(COALESCE(`affiliate_name`,''),'-',COALESCE(`model`,''),'-',COALESCE(`ip`,''),'-',COALESCE(`os_type`,''),'-',COALESCE(`os_version`,'')) AS device_name FROM devices
Cette requête renvoie le résultat souhaité :
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-
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!