如何将 CONCAT_WS 与 COALESCE 一起使用?

How to use CONCAT_WS with COALESCE?

我有一个 table users,它有字段 firstNamelastName。两者都可以为NULL。

我想 select 全名,其中之一,或者如果两者都没有设置则默认为字符串。我尝试了以下查询,但如果它们都是 NULL,则值不会设置为 Unnamed,而是生成一个空字符串。

SELECT COALESCE(CONCAT_WS(' ', firstName, lastName), 'Unnamed') AS fullName FROM users;

我不能用CONCAT,因为如果只填其中一个名字,我希望单个名字returned,而CONCAT会return 如果未设置其中一个值,则为 NULL。

如何仅在两列都为 NULL 时设置默认值?

对了,如果两个字符串都为NULL,那么return的值就是分隔符,你设置为' '。因此,如果 CONCAT_WS() 的结果是 ' '.

,您可以将其转换为 NULL
SELECT COALESCE(
  NULLIF(CONCAT_WS(' ', firstName, lastName), ' '), 
  'Unnamed'
 ) AS fullName 
FROM users;

COCNAT_WS() returns 字符串,如果除分隔符之外的所有参数都是 NULL.

所以,做你想做的一种方法是:

SELECT COALESCE(NULLIF(CONCAT_WS(' ', firstName, lastName), ''), 'Unnamed') AS fullName
FROM users;

但是,如果没有 CONCAT_WS(),这可能会更简单:

select coalesce(concat(firstName, ' ', lastName),
                firstName,
                lastname,
                'Unnamed'
               ) as fullName