在MS SQL中,如何将varchar和seperate与逗号组合(如果两个varchar都存在)

时间:2016-11-09 15:53:15

标签: sql sql-server

希望你们能帮助一下。我的挑战很简单,但我不确定以什么方式解决它。 我有2个varchar字段,我想将它们组合在一起,如果BOTH字段包含文本,则用逗号分隔它们。两个字段都可以为null,为空或内置文本。

Firstname | Last name | Result
   Not    |   Sure    | Not, Sure 
          |   Sure    | Sure
   Not    |           | Not 
  (null)  |   Sure    | Sure
   Not    |   (null)  | Not
  (null)  |   (null)  |      

2 个答案:

答案 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
...