简体   繁体   中英

Correct Amount of Spaces with concatenated person's name in SQL Server

Here is my SQL as I have it now. The first and last name should never be missing because they are required on the interface with validation. However, if the middle initial is missing, I don't want two spaces in the result; I just want one space. I could put a case statement in, but that seems like overkill if SQL already has a function for this purpose. Does anyone know if there is a function for this purpose? What would the code look like?

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

However, you either should remove ISNULL for firstname, lastname (defined NOT NULL?) or add some trims

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

In SQL Server 2012 and up you can use CONCAT function:

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

If middleinitial is null then appending space to null value will result in null value and CONCAT will skip this null value during concatenation.

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM