SQL CONCAT с оператором IF - PullRequest
       10

SQL CONCAT с оператором IF

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

У меня есть это:

SELECT CONCAT(forename,' ',IFNULL(initials, ''),' ',surname) AS name FROM users

Как мне изменить его так, чтобы, если поле инициалов было нулевым, оно также не содержало пробела после него?

Ответы [ 3 ]

6 голосов
/ 15 февраля 2011
SELECT CONCAT(forename,' ',IFNULL(CONCAT(initials,' '), ''),surname) AS name FROM users
1 голос
/ 01 октября 2012

Я бы использовал CONCAT_WS.Например:

SELECT CONCAT_WS(' ', NULL, 'First', NULL, 'Last', NULL);

Будет возвращена строка «Первый последний» без пробелов, кроме тех, которые CONCAT_WS поместил между двумя строками, которые не равны NULL.

Первый аргументCONCAT_WS - это клей, который появляется между ненулевыми значениями.

В вашем случае это будет:

SELECT CONCAT_WS(' ', forename, initials, surname) AS name FROM users;

Отсюда:

http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_concat-ws

Редактировать: Это работает только в MySQL.

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

Использование SELECT CONCAT(forename, ' ', CASE WHEN initials IS NULL THEN '' ELSE initials || ' ' END, surname) ...

...