如何将CONCAT_WS与COALESCE一起使用?

时间:2019-09-01 20:00:43

标签: mysql sql concat coalesce concat-ws

我有一个表items.OrderBy(x => x.Name); ,其中有字段usersfirstName。它们都可以为NULL。

我想选择全名,或全名之一,如果未设置全名,则默认为字符串。我尝试了以下查询,但是如果它们都为NULL,则该值未设置为lastName,而是生成了一个空字符串。

Unnamed

我不能使用SELECT COALESCE(CONCAT_WS(' ', firstName, lastName), 'Unnamed') AS fullName FROM users; ,因为如果仅填写其中一个名称,我希望返回单个名称,如果其中一个值不为CONCAT,则返回NULL组。

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

2 个答案:

答案 0 :(得分:3)

对,如果两个字符串均为NULL,则返回值为分隔符,您已将其设置为' '。因此,如果CONCAT_WS()的结果为' ',则可以将其转换为NULL。

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

答案 1 :(得分:2)

如果除分隔符以外的所有参数均为COCNAT_WS(),则

NULL返回 empty 字符串。

因此,一种您想要做的事情是:

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

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

select coalesce(concat(firstName, ' ', lastName),
                firstName,
                lastname,
                'Unnamed'
               ) as fullName
相关问题