希望你们能帮助一下。我的挑战很简单,但我不确定以什么方式解决它。 我有2个varchar字段,我想将它们组合在一起,如果BOTH字段包含文本,则用逗号分隔它们。两个字段都可以为null,为空或内置文本。
Firstname | Last name | Result
Not | Sure | Not, Sure
| Sure | Sure
Not | | Not
(null) | Sure | Sure
Not | (null) | Not
(null) | (null) |
答案 0 :(得分:3)
其他一些数据库具有方便的concat_ws()
功能。
您可以设置复杂的case
。这是一个表达你想要的表达式:
select replace(ltrim(rtrim(coalesce(firstname, '') + ' ' + coalesce(lastname, ''))), ' ', ', ')
这个想法是它在两个名称之间放置一个空格(将NULL
值视为空字符串)。然后它修剪前导和尾随空格,并用', '
替换空格。
注意:假设,在您的示例中,名称中没有空格。
如果他们可以有空格,case
是更好的选择:
select (case when firstname is null then coalesce(lastname, '')
when lastname is null then firstname
else firstname + ', ' + lastname
end)
答案 1 :(得分:0)
像这样简单的东西应该有用......
...
case
when FirstName IS NOT NULL and FirstName <> '' and LastName IS NOT NULL and LastName <> '' THEN CONCAT(FirstName, ', ',LastName)
when FirstName = '' and LastName IS NOT NULL and LastName <> '' then LastName
when LastName = '' and FirstName IS NOT NULL and FirstName <> '' then FirstName
ELSE coalesce(FirstName, LastName)
end
...