首页 > 解决方案 > 在 Microsoft SQL Server 中连接全名

问题描述

假设我有一张包含以下信息的表格

Title   FirstName    MiddleName    LastName    Suffix
======|============|=============|============|======
Mr.    John         Fitzgerald    Kennedy      NULL
NULL   John         NULL          Doe          III

我想创建一个查询来输出上述信息的全名。例如,我希望输出看起来像

Mr. John Fitzgerald Kennedy
John Doe, III

我正在考虑使用该concat()功能,但我不确定如何执行此操作以确保名称中没有多余的空格或逗号。

标签: sqlsql-serverconcatenation

解决方案


这有点棘手。SQL Server 2017+ 支持concat_ws(). 但是,后缀仍然需要逗号。幸运的是,concat()忽略NULLs:

select concat(concat_ws(' ', title, firstname, middlename, lastname),
              ', ' + suffix
             )

早期版本需要更多的工作来避免在有NULL值时出现多个空格:

select ltrim(concat(' ' + title,
                    ' ' + firstname,
                    ' ' + middlename,
                    ' ' + lastname,
                    ', ' + suffix
                   )
            )

这使用了当参数为 时+返回的事实。但是,忽略它。NULLNULLconcat()

NULL注意:如果所有名称都存在但后缀存在,那么您可能也不想要。但是,我怀疑这是您的数据中的一个问题。

是一个 db<>fiddle。


推荐阅读