FirstName, LastName в SQL слишком сложный? - PullRequest
4 голосов
/ 05 декабря 2009

Этот SQL кажется сложным, есть ли более простой способ получить FirstName, LastName, когда одно или оба поля могут быть NULL?

SELECT COALESCE(LastName,'')+
       CASE WHEN LastName+FirstName IS NOT NULL THEN ', ' END+
       COALESCE(FirstName,'') AS Name
FROM Person

Ответы [ 3 ]

13 голосов
/ 05 декабря 2009

Как насчет

SELECT COALESCE(LastName + ', ' + FirstName, 
                LastName, FirstName) Name
FROM Person

если firstname или lastname равно нулю, все первое выражение (с ,) становится равным нулю, вынуждая объединение проверить, во-вторых, только lastname, а затем, если lastname равно нулю наконец, только 1009

1 голос
/ 31 мая 2013

Вы можете предварительно рассчитать это в таблице, используя вычисляемый столбец, если вы будете часто использовать эту форму имени. Столбец может даже быть проиндексирован, если вам это нужно.

ALTER TABLE A
ADD [person_name_last_first]  AS COALESCE(LastName + ', ' + FirstName, 
                LastName, FirstName) PERSISTED

Самым большим преимуществом является то, что вам больше никогда не придется писать этот фрагмент кода, имена будут отображаться последовательно, и вы используете время баз данных только для выполнения этого действия, когда имя или фамилия добавляются или изменяются.

0 голосов
/ 05 декабря 2009

Я не думаю, что это вообще сложно ... На MSSQL вы можете сделать что-то вроде

SELECT Isnull(LastName,'') + ', ' + Isnull(FirstName,'')
FROM Person
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...