Как я могу объединить столбцы как нулевые? - PullRequest
1 голос
/ 03 мая 2019

Вот мой код:

SELECT COALESCE(CONCAT(u.user_fname, ' ', u.user_lname), 'unknown') name
FROM users u
WHERE id = 10;

Результат будет unknown, если user_fname или user_lname равно нулю. Это не то, что я хочу, я хочу выбрать unknown только тогда, когда оба значения user_fname и user_lname равны нулю.

В противном случае я хочу получить значение не пустого столбца. Как я могу это сделать?

Ответы [ 3 ]

5 голосов
/ 03 мая 2019

Использование concat_ws():

SELECT CONCAT_WS(' ', u.user_fname, u.user_lname) name
FROM users u
WHERE id = 10;

Это имеет то преимущество, что если любое из имен равно null, в результате вы не получите ложного пробела.

Это немного сложно, если вы хотите конвертировать NULL s в "unknown".Это должно сделать трюк:

SELECT COALESCE(NULLIF(CONCAT_WS(' ', u.user_fname, u.user_lname) , ''), 'unknown') as name
FROM users u
WHERE id = 10;
2 голосов
/ 03 мая 2019

Вы можете использовать:

SELECT COALESCE(
         TRIM(CONCAT(COALESCE(u.user_fname,''), ' ', COALESCE(u.user_lname,''))),
        'unknown') name
FROM users u
WHERE id = 10;
1 голос
/ 03 мая 2019

Мне всегда нравится функция isnull на сервере sql (или nvl в oracle):

SELECT isnull(u.user_fname + ' ','') + isnull(u.user_lname, '') name
FROM users u
WHERE id=10

но затем, чтобы включить нули, я бы использовал регистр:

SELECT
CASE WHEN u.user_fname IS NULL AND u.user_lname is NULL THEN 'unknown'
ELSE isnull(u.user_fname + ' ','') + isnull(u.user_lname, '') END name
FROM users u
WHERE id=10

Да, это немного дольше, чем другие ответы, но легче читать и, возможно, будет более гибким в будущем, если у вас будут другие условия.

В любом случае, это не удар по производительности, поэтому все зависит от личных предпочтений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...