2015-01-14 11 views
0

我想弄清楚如何连接多个名称,如姓氏和婚前姓名(包括可能的前缀)作为全名,没有双间距使用短划线只有当必要的(当一个人有两个名字时)。SQL concat多个名称,并添加破折号在两个名字的情况

例如:

  • 当一个人有两个姓氏和家人的名字,我希望它看起来像 'A. van Dijk - Turner'(注意划线,“范·德”为前缀)
  • 当一个人只有最后的或未婚的名字时,我想让它看起来像'A van Dijk'

以下示例代码肯定是不够的:

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

如果一个人仅仅具有婚前姓,上面例如结果的代码'A - 范Dijk'。

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

+0

您正在使用什么数据库所需的任何其他列? –

+0

我使用SQL服务器12.0.2 – ralph

回答

2

尝试类似COALESCE(initals || ' ',''),即如果首字母不为空,则返回首字母加空格。如果首字母为空,则返回空字符串。

+0

谢谢,但语法不被接受(不正确的语法?)。当我将它更改为单管道时,它也不起作用(数据类型nvarchar和varchar在'|'运算符中不兼容)。 – ralph

+0

也许,这是ANSI SQL语法。直到现在我还没有注意到SQL Server标记,所以我写了一个或多或少的dbms独立答案。也许coalesce(concat(首字母缩写,''),'')适用于SQL Server? – jarlh

+0

作品,谢谢:)。 – ralph

0

使用方法如下:

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

或者其他简单的版本:

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

,你

+0

我不断收到短跑,我不想看到它。只有在两个名字的情况下,他们应该用短划线分开。 – ralph

+0

有了上述查询,你一定不会看到那个恼人的破折号! :) –

相关问题