如何在SQL Server中组合名字,中间名和姓氏

时间:2018-02-02 06:24:47

标签: sql-server

您可以参考以下查询来获得相同的内容 -

1

select FirstName +' '+ MiddleName +' ' + Lastname as Name from TableName.

2

select CONCAT(FirstName , ' ' , MiddleName , ' ' , Lastname) as Name from 
  TableName

3

select Isnull(FirstName,' ') +' '+ Isnull(MiddleName,' ')+' '+ Isnull(Lastname,' ') 
from TableName.

注意:如果所有列都为null或者为空,则所有列都具有某个值,则返回Point 1查询,然后它将为所有列返回null,表示Name将返回" NULL"值。

要避免点编号1,您可以使用点编号2或点编号3 -

我们可以使用IsNullCONCAT关键字来获得相同的内容。

如果任何人包含空值,那么' ' (空格)将添加下一个值。

8 个答案:

答案 0 :(得分:4)

  • 使用RTRIMLTRIM的组合将在每一端去除任何空白。
  • CONCAT将名称段附加在一起
  • COALESCE用空字符串替换NULL

经过格式化以提高可读性

SELECT 
    RTRIM(LTRIM(
        CONCAT(
            COALESCE(FirstName + ' ', '')
            , COALESCE(MiddleName + ' ', '')
            , COALESCE(Lastname, '')
        )
    )) AS Name
FROM TableName

答案 1 :(得分:1)

Just Do A替换#3上具有单个空格的双空格,它应该按预期工作

SELECT 
    LTRIM(RTRIM(REPLACE(
    ISNULL(FirstName,' ') 
    +' '+ 
    ISNULL(MiddleName,' ')
    +' '+ 
    ISNULL(Lastname,' '),
    '  ',' ')))
FROM TableName

答案 2 :(得分:1)

SELECT rtrim(concat(FirstName + ' ', MiddleName + ' ', LastName + ' '))

答案 3 :(得分:1)

这对我有用。

如果您有 SqlServer 2014(或更低版本)。

Select
REPLACE(
    REPLACE(ISNULL(FirstName,''),' ','') +' '+
    REPLACE(ISNULL(MiddleName,''),' ','') +' '+
    REPLACE(ISNULL(LastName,''),' ','')
,'  ',' ') AS [FullName]
from [Table];
GO

使用此代码的好处是:

  • 它删除 (NULL) 和 (Empty) 名称。
  • 删除包含多个空格(开头)或(结尾)或(姓名字母之间)的名称。

答案 4 :(得分:0)

好吧,我猜你在寻找:

select Isnull(FirstName,'') +' '+ Isnull(MiddleName,'')+' '+ Isnull(Lastname,'') from TableName

也就是说,当任何名称为null时,它将替换为空字符串''

答案 5 :(得分:0)

替换功能在连接First, Middle 和Last Name时会删除两个字符空白。

SQL2016及以上兼容代码

SELECT REPLACE(CONCAT(FirstName+' ',MiddleName+' ',LastName+' '),'  ',' ') 
AS EmployeeName
FROM dbo.Employee

SQL SERVER 2017兼容代码:

  SELECT REPLACE(CONCAT_WS(' ',FirstName,MiddleName,LastName),'  ',' ')AS 
  EmployeeName FROM dbo.Employee 

答案 6 :(得分:0)

select CONCAT(FirstName , " ", MiddleName, " ", LastName  )as Name from 
  TableName

使用""解决了我的问题

答案 7 :(得分:0)

这处理...

  • 任何名称字段都可以是 NULL 或空白,
  • 名称中间可以有两个或多个空格(不像使用 REPLACE),并且
  • 甚至与 SQL Server 2008 兼容(至少根据我的测试):
SELECT RTRIM(ISNULL(NULLIF(LTRIM(RTRIM(T.FirstName)), '') + ' ', '') +
             ISNULL(NULLIF(LTRIM(RTRIM(T.MiddleName)), '') + ' ', '') +
             ISNULL(NULLIF(LTRIM(RTRIM(T.LastName)), ''), '')) AS name
FROM TableName T
    如果名称为空,
  • NULLIF(LTRIM(RTRIM(T.FirstName)), '') + ' ' 的计算结果为 NULL,因为与 NULL 连接的任何内容都是 NULL。否则,它返回一个带有尾随空格的修剪过的名称。
    • LTRIMRTRIM 删除值开头和结尾的间距。如果您使用的是 SQL Server 2017 或更高版本,也可以改用 TRIM
    • 如果两个指定的表达式相等,
    • NULLIF 返回空值。在这种情况下,如果名称为空,我们将返回一个空值。
  • ISNULL 用指定的替换值替换 NULL。如果名称为 NULL 或空白,则第一个参数仅为 NULL,然后替换为空的 VARCHAR,这意味着在与其余名称字段连接时不会引入额外的空格。
  • 如果姓氏为 RTRIM 或空白,但不是名字或中间名,则外部 NULL 会删除最后一个可能的空格。