1

我有一个表users,其中包含字段firstNamelastName. 它们都可以为NULL。

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

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

我不能使用CONCAT,因为如果只填写其中一个名称,我希望返回单个名称,CONCAT如果未设置其中一个值,则返回 NULL。

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

4

2 回答 2

3

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

SELECT COALESCE(
  NULLIF(CONCAT_WS(' ', firstName, lastName), ' '), 
  'Unnamed'
 ) AS fullName 
FROM users;
于 2019-09-01T20:05:51.140 回答
2

COCNAT_WS()如果除分隔符之外的所有参数都是 ,则返回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
于 2019-09-01T20:52:55.427 回答