在SQL Server中使用连接人的名称更正空间量

时间:2011-07-14 18:54:01

标签: sql-server concatenation varchar spaces

这是我现在拥有的SQL。永远不应该丢失名字和姓氏,因为在验证界面上需要它们。但是,如果缺少中间的首字母,我不希望结果中有两个空格;我只想要一个空间。我可以放一个case语句,但是如果SQL已经有了一个用于此目的的函数,那似乎有些过分。有没有人知道是否有用于此目的的功能?代码会是什么样的?

SELECT ISNULL(contact.firstname, '') 
         + ' ' 
         + ISNULL(contact.middleinitial, '') 
         + ' ' 
         + ISNULL(contact.lastname, '')
FROM dbo.contact

3 个答案:

答案 0 :(得分:7)

SELECT
 ISNULL(contact.firstname, '') + 
 ISNULL(' ' + contact.middleinitial + ' ', ' ') + 
 ISNULL(contact.lastname, '')

但是,你应该删除ISNULL for firstname,lastname(定义NOT NULL?)或添加一些修剪

SELECT
 LTRIM(RTRIM(
   ISNULL(contact.firstname, '') + 
    ISNULL(' ' + contact.middleinitial + ' ', ' ') + 
    ISNULL(contact.lastname, '')
 ))

答案 1 :(得分:3)

在SQL Server 2012及更高版本中,您可以使用CONCAT功能:

    SELECT  CONCAT(contact.firstname, ' ' + contact.middleinitial, ' ' + contact.lastname)
    FROM dbo.contact

如果 middleinitial 为null,则将空格追加到空值将导致空值,并且CONCAT将在连接期间跳过此空值。

答案 2 :(得分:1)

SELECT REPLACE(ISNULL(contact.firstname, '') + ' ' + ISNULL(contact.middleinitial, '') + ' ' + ISNULL(contact.lastname, '')
               ,'  ',' ')
FROM dbo.contact