MySQL CONCAT IFNULL如何使用两个以上的值?

Rya*_*yan 5 mysql concat concatenation ifnull

我需要CONCAT两个字段,如果它们都存在并在第二个字段周围添加括号.否则我只需要列出第一个字段.

这是简单的版本:

SELECT id, CONCAT(name,' (',nickname,')') as name FROM user;
Run Code Online (Sandbox Code Playgroud)

只要名称和昵称都存在,您应该获得如下结果:

1 | Adam (Alpha Dog)
2 | Bob (Bobby)
3 | Charles (Charlie)
Run Code Online (Sandbox Code Playgroud)

但是,如果没有昵称,它只会跳过整个事情null.例如:id 4,name Doug,nickname null给出结果:

4 | null
Run Code Online (Sandbox Code Playgroud)

我想看到的只是列出名称......像这样:

4 | Doug
Run Code Online (Sandbox Code Playgroud)

所以我开始关注CONCAT IFNULL.但是我很难把它弄好.你能帮我吗?

以下是我尝试过的几个例子:

SELECT id, CONCAT(IFNULL(name, ' (', nickname, ')', name) as name FROM user;
SELECT id, CONCAT(name, IFNULL(' (', nickname, ')')) as name FROM user;
Run Code Online (Sandbox Code Playgroud)

fth*_*lla 13

您可以使用跳过空字符串的CONCAT_WS:

SELECT id, CONCAT_WS(' ', name, concat('(',nickname,')')) as name FROM user;
Run Code Online (Sandbox Code Playgroud)

  • 如果您出于任何原因需要使用“CONCAT”而不是“CONCAT_WS”,则可以在每个可空列周围使用“COALESCE(column, '')”包装器,这是比提到的“CASE”更优雅的方式或下面的“IF”解决方案。 (2认同)