我有一个表items.OrderBy(x => x.Name);
,其中有字段users
和firstName
。它们都可以为NULL。
我想选择全名,或全名之一,如果未设置全名,则默认为字符串。我尝试了以下查询,但是如果它们都为NULL,则该值未设置为lastName
,而是生成了一个空字符串。
Unnamed
我不能使用SELECT COALESCE(CONCAT_WS(' ', firstName, lastName), 'Unnamed') AS fullName FROM users;
,因为如果仅填写其中一个名称,我希望返回单个名称,如果其中一个值不为CONCAT
,则返回NULL组。
仅当两列都为NULL时才如何设置默认值?
答案 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