Как объединить FirstName, MiddleName, LastName, запятую и суффикс в SQL Server?

Я пытаюсь объединить FirstName, MiddleName, LastName, затем запятую и суффикс. Пример здесь описывает это:

Sno. FirstName  MiddleName  LastName        Suffix    Result
---------------------------------------------------------------
1.   ROBERT     NULL        SMALLWOOD       NULL      ROBERT SMALLWOOD
2.   KIRK       NULL        ROBERTS         MR        KIRK ROBERTS, MR
3.   WILLIAM    DARRELL     WATTENBARGER    Jr.       WILLIAM DARRELL WATTENBARGER, MR

Если нет Suffixтогда запятая (,) не должно быть добавлено также должен быть только один пробел после каждого столбца.

Пока я пытался

REPLACE(RTRIM(Coalesce(FirstName + ' ', '') + Coalesce(MiddleName + ' ', '') + Coalesce(LastName + ' ', '') + Coalesce(SuffixId + ' ', '')),'  ',' ')

Теперь, как мне добавить запятую перед суффиксом, если он существует только без регистра.

Спасибо

3 ответа

Ты можешь использовать CONCAT:

SELECT CONCAT(FirstName,' ',MiddleName + ' ' ,LastName,', '+NULLIF(Suffix,'')) [Result]
FROM dbo.YourTable;

Используйте ISNULL:

SELECT ISNULL(FirstName + ' ', '') + ISNULL(MiddleName + ' ', '') + ISNULL(LastName + ' ', '') + ISNULL(', ' + SuffixId, '') 
    FROM My_Table_Name

Это решение, которое я придумал, попробуйте и посмотрите, сработало ли это для вас.

create table #FullNameCalculation
(
    Sno int not null,
    FirstName varchar(10),
    MiddleName varchar(10),
    LastName varchar(15),
    Suffix varchar(5)
)

insert into #FullNameCalculation
    (Sno,FirstName,MiddleName,LastName,Suffix) 
values
    (1, 'ROBERT', NULL,'SMALLWOOD', NULL),
    (2, 'KIRK', NULL, 'ROBERTS', 'MR'),
    (3,'WILLIAM', 'DARRELL', 'WATTENBARGER', 'JR.'),
    (4,NULL,'BARBER','SINK','MS'),
    (5,NULL,NULL,'SANDERS','MRS.'),
    (6,'SARA',' D','WILLIAMS ',' MS');

SELECT * FROM #FullNameCalculation;

SELECT *, 
    RTRIM(LTRIM(CONCAT(RTRIM(LTRIM(FirstName)),' ',
                       RTRIM(LTRIM(MiddleName)),' ',
                       RTRIM(LTRIM(LastName)),
                       iif(RTRIM(LTRIM(Suffix)) IS NULL OR RTRIM(LTRIM(Suffix))='','',', '+RTRIM(LTRIM(Suffix)))))) AS FullName 
FROM #FullNameCalculation;

Я хотел сделать что-то подобное и использовал COALESCEкак OP. Используя предложение от Mark Adelsberger мой запрос выглядел так:

SELECT 
    RTrim(Coalesce(FirstName + ' ', '')
        + Coalesce(MiddleName + ' ', '')
        + Coalesce(LastName + ' ', '')
        + Coalesce(', ' + Suffix, '')) FullName
FROM dbo.YourTable
Другие вопросы по тегам