MySQL CONCAT 对于包含 NULL 的字段返回 NULL:解决方案和替代方案
MySQL 的 CONCAT 函数将多个字段连接成一个字符串。但是,当某些字段包含 NULL 值时,可能会出现问题,导致整个表达式返回 NULL。
问题概述
考虑下表和查询:
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
此查询返回的设备名称为如下:
cs1-Dell-10.125.103.25-Linux-Fedora cs2-Dell-10.125.103.26-Linux-Fedora (NULL) (NULL)
解决方案:将 NULL 替换为空字符串
要忽略 NULL 值并连接空字符串,可以使用 COALESCE 函数。 COALESCE 接受多个参数并返回第一个非 NULL 参数。
这是修改后的查询:
SELECT CONCAT(COALESCE(`affiliate_name`,''),'-',COALESCE(`model`,''),'-',COALESCE(`ip`,''),'-',COALESCE(`os_type`,''),'-',COALESCE(`os_version`,'')) AS device_name FROM devices
此查询返回所需的结果:
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-
以上是为什么当字段包含 NULL 值时 MySQL 的 CONCAT 返回 NULL?如何修复?的详细内容。更多信息请关注PHP中文网其他相关文章!