T-SQL: лучший способ обработки значений NULL при конкатенации строк - PullRequest
9 голосов
/ 10 февраля 2011

Если в операторе SELECT я выбираю каскадную строку, которая использует значения из таблиц, из которых я выбираю, каков наилучший способ обработки значений NULL для этих значений, чтобы у меня все еще была моя строка?Например, если я выбираю город, штат и страну для пользователя, и мне нужно третье поле, объединяющее их все:

SELECT City, State, Country,
City + ', ' + State + ', ' + Country AS 'Location'
FROM Users

Однако «Местоположение» равно NULL, если любой из трехfields равен NULL (что происходит всякий раз, когда пользователь не из США).

Мое текущее решение таково:

SELECT City, State, Country,
City + ', ' + COALESCE(State + ', ', '') + Country AS 'Location'
FROM Users

Но я не был уверен, что это был просто взломи если есть намного лучший способ сделать это.Мысли?

Ответы [ 3 ]

15 голосов
/ 10 февраля 2011

Чтобы предсказуемо выглядеть правильно с запятыми между каждыми двумя полями, вы можете использовать эту форму

;with users(City, State, Country) as (
select 'a', null, 'c' union all
select 'a', 'b', 'c' union all
select null, null, 'c')

-- ignore above this line
SELECT City, State, Country,
    STUFF(
        ISNULL(', ' + City, '')+
        ISNULL(', ' + State, '')+
        ISNULL(', ' + Country, ''), 1, 2, '') AS 'Location'
FROM Users

Выходные данные

City State Country Location
---- ----- ------- --------
a    NULL  c       a, c
a    b     c       a, b, c
NULL NULL  c       c
4 голосов
/ 13 мая 2015

Вы можете использовать функцию Concat в SQL 2012 и более поздних версиях

SELECT City, State, Country,
Concat(City, ', ', State, ', ', Country) AS 'Location'
FROM Users
2 голосов
/ 10 февраля 2011

Да, это путь.Вы также можете использовать isnull (), но coalesce более стандартен.Вы можете подумать, если у вас могут быть нули в городе или стране.Вы также можете подумать, что пользователи могут иметь несколько адресов и могут иметь более одного города, штата, страны, и, возможно, для этой информации будет лучше использовать связанную таблицу.

...