我在“设备”表中有以下数据
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
我执行了以下查询
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和结果应该是
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-
答案 0 :(得分:213)
将NULL
值用空字符串转换为COALESCE
SELECT CONCAT(COALESCE(`affiliate_name`,''),'-',COALESCE(`model`,''),'-',COALESCE(`ip`,''),'-',COALESCE(`os_type`,''),'-',COALESCE(`os_version`,'')) AS device_name
FROM devices
答案 1 :(得分:109)
改为使用CONCAT_WS:
CONCAT_WS()不会跳过空字符串。但是,它会在分隔符参数后跳过任何NULL值。
SELECT CONCAT_WS('-',`affiliate_name`,`model`,`ip`,`os_type`,`os_version`) AS device_name FROM devices
答案 2 :(得分:11)
SELECT CONCAT(isnull(`affiliate_name`,''),'-',isnull(`model`,''),'-',isnull(`ip`,''),'-',isnull(`os_type`,''),'-',isnull(`os_version`,'')) AS device_name
FROM devices
答案 3 :(得分:10)
在CONCAT_WS中具有与CONCAT相同的灵活性(例如,如果您不希望每个成员之间使用相同的分隔符),请使用以下命令:
SELECT CONCAT_WS("",affiliate_name,':',model,'-',ip,... etc)
答案 4 :(得分:4)
CONCAT_WS
仍会为我生成null。我通过在开头添加零长度字符串来解决这个问题,如
CONCAT_WS("",`affiliate_name`,'-',`model`,'-',`ip`,'-',`os_type`,'-',`os_version`)
然而
CONCAT("",`affiliate_name`,'-',`model`,'-',`ip`,'-',`os_type`,'-',`os_version`)
当第一个字段为空时,产生Null。
答案 5 :(得分:2)
您可以使用if语句,如下所示
select CONCAT(if(affiliate_name is null ,'',affiliate_name),'- ',if(model is null ,'',affiliate_name)) as model from devices
答案 6 :(得分:2)
原因:
<块引用>MySQL :: Reference Manual :: 12.8 String Functions and Operators 说:
如果任何参数为 NULL,CONCAT()
返回 NULL。
解决方案:
<块引用>MySQL :: Reference Manual :: 12.5 Flow Control Functions 说:
IFNULL(expr1,expr2)
如果expr1不是NULL,IFNULL()返回expr1;否则返回 expr2。
SELECT
CONCAT(
IFNULL(`affiliate_name`, ''),
'-',
IFNULL(`model`, ''),
'-',
IFNULL(`ip`, ''),
'-',
IFNULL(`os_type`, ''),
'-',
IFNULL(`os_version`, '')
) AS device_name
FROM
devices