Исправьте количество пробелов с объединенным именем человека в SQL Server - PullRequest
3 голосов
/ 14 июля 2011

Вот мой SQL, какой у меня есть сейчас. Имя и фамилия никогда не должны быть пропущены, потому что они требуются на интерфейсе с проверкой. Однако, если отсутствует начальная середина, мне не нужны два пробела в результате; Я просто хочу один пробел. Я мог бы добавить оператор case, но это кажется излишним, если в SQL уже есть функция для этой цели. Кто-нибудь знает, есть ли функция для этой цели? Как будет выглядеть код?

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

Ответы [ 3 ]

7 голосов
/ 14 июля 2011
SELECT
 ISNULL(contact.firstname, '') + 
 ISNULL(' ' + contact.middleinitial + ' ', ' ') + 
 ISNULL(contact.lastname, '')

Однако вы должны либо удалить ISNULL для имени, фамилии (определено NOT NULL?), Либо добавить несколько триммеров

SELECT
 LTRIM(RTRIM(
   ISNULL(contact.firstname, '') + 
    ISNULL(' ' + contact.middleinitial + ' ', ' ') + 
    ISNULL(contact.lastname, '')
 ))
3 голосов
/ 12 августа 2016

В SQL Server 2012 и выше вы можете использовать функцию CONCAT:

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

Если middleinitial равно нулю, добавление пробела к нулевому значению приведет к нулевому значению, и CONCAT пропустит это нулевое значение во время конкатенации.

1 голос
/ 14 июля 2011
SELECT REPLACE(ISNULL(contact.firstname, '') + ' ' + ISNULL(contact.middleinitial, '') + ' ' + ISNULL(contact.lastname, '')
               ,'  ',' ')
FROM dbo.contact
...