SQL汇总多个名称,并在两个名称的情况下添加破折号

时间:2015-01-14 12:59:47

标签: sql sql-server sql-server-2012 concat names

我正在试图找出如何将多个名称(如姓氏和首页名称(包括可能的前缀))连接为全名而不使用双倍间距仅在必要时使用短划线(当一个人有两个名字时)。

例如:

  • 当一个人同时拥有姓氏和姓氏时,我希望它看起来像 'A. van Dijk - Turner'(注意破折号,'van de'是前缀)
  • 当一个人只有姓氏或婚前姓名时,我希望它显示为'A van Dijk'

以下示例代码绝对不够:

concat (initals, ' ',prefixlastname,' ', lastname, ' - ', prefixmaidenname ', maidenname) AS 'full name'

如果某人只有一个婚前姓名,则上述代码会导致例如'A - van Dijk'。

最有效的解决方案是什么?非常感谢提前。

3 个答案:

答案 0 :(得分:2)

尝试类似COALESCE(initals || ' ','')的内容,即如果首字母不是空,则返回空格和空格。如果initials为NULL,则返回空字符串。

答案 1 :(得分:0)

使用如下:

SELECT  REVERSE(SUBSTRING(REVERSE(ISNULL(FirstName + '-','') + ISNULL(LastName + '-','')),2,8000))

或另一个更简单的版本:

SELECT  REVERSE(SUBSTRING(REVERSE(CONCAT(FirstName +'-', LastName + '-') ),2,8000))

以及您想要的其他任何列

答案 2 :(得分:0)

我的两分钱

COALESCE(姓氏前缀+''+姓氏+'-',姓氏+'-','')+ COALESCE(姓氏前缀+''+姓氏,姓氏,'')纳姆

先决条件:

  • 语法通常是荷兰语
  • 出生名字是您出生的名字:永远存在
  • 姓氏是已婚的名字(仅适用于女性)
  • 这仅在男人的名字仅在姓氏中时起作用

Coalesce从左到右顺序查找第一个非NULL值。如果没有名称前缀,则评估下一个值。