nee*_*raj 138 mysql sql null concat
我在表"设备"中有以下数据
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
Run Code Online (Sandbox Code Playgroud)
我执行下面的查询
SELECT CONCAT(`affiliate_name`,'-',`model`,'-',`ip`,'-',`os_type`,'-',`os_version`) AS device_name
FROM devices
Run Code Online (Sandbox Code Playgroud)
它返回下面给出的结果
cs1-Dell-10.125.103.25-Linux-Fedora
cs2-Dell-10.125.103.26-Linux-Fedora
(NULL)
(NULL)
Run Code Online (Sandbox Code Playgroud)
如何摆脱这一点,以便它应该忽略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-
Run Code Online (Sandbox Code Playgroud)
Joh*_*Woo 239
通过将NULL值包装在空中来转换值COALESCE
SELECT CONCAT(COALESCE(`affiliate_name`,''),'-',COALESCE(`model`,''),'-',COALESCE(`ip`,''),'-',COALESCE(`os_type`,''),'-',COALESCE(`os_version`,'')) AS device_name
FROM devices
Run Code Online (Sandbox Code Playgroud)
Ger*_*rry 119
请改用CONCAT_WS:
CONCAT_WS()不会跳过空字符串.但是,它会在分隔符参数后跳过任何NULL值.
SELECT CONCAT_WS('-',`affiliate_name`,`model`,`ip`,`os_type`,`os_version`) AS device_name FROM devices
Run Code Online (Sandbox Code Playgroud)
pat*_*ick 12
要在CONCAT_WS中具有与CONCAT相同的灵活性(例如,如果您不希望每个成员之间使用相同的分隔符),请使用以下命令:
SELECT CONCAT_WS("",affiliate_name,':',model,'-',ip,... etc)
Run Code Online (Sandbox Code Playgroud)
Sha*_*fin 12
原因:
MySQL :: 参考手册 :: 12.8 字符串函数和运算符说:
CONCAT()如果任何参数为NULL ,则返回NULL。
解决方案:
Run Code Online (Sandbox Code Playgroud)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
Run Code Online (Sandbox Code Playgroud)
小智 11
SELECT CONCAT(isnull(`affiliate_name`,''),'-',isnull(`model`,''),'-',isnull(`ip`,''),'-',isnull(`os_type`,''),'-',isnull(`os_version`,'')) AS device_name
FROM devices
Run Code Online (Sandbox Code Playgroud)
小智 6
CONCAT_WS如果第一个字段为Null,仍然为我产生null。我通过在开头添加零长度的字符串来解决此问题,如下所示
CONCAT_WS("",`affiliate_name`,'-',`model`,'-',`ip`,'-',`os_type`,'-',`os_version`)
Run Code Online (Sandbox Code Playgroud)
然而
CONCAT("",`affiliate_name`,'-',`model`,'-',`ip`,'-',`os_type`,'-',`os_version`)
Run Code Online (Sandbox Code Playgroud)
当第一个字段为Null时产生Null。
| 归档时间: |
|
| 查看次数: |
100011 次 |
| 最近记录: |