MySQL объединяет поля, но игнорирует пустые - PullRequest
8 голосов
/ 26 февраля 2010

У меня есть база данных MySQL со списком людей, включая их адреса, которые я хочу вернуть как одно поле в запросе. Это разделено на address1, address2, address3, address4, post_code, и я хочу сделать что-то вроде следующего

SELECT CONCAT(`address1`, ' ',  `address2`, ' ', `address3`, ' ', `address4`, ' ', `post_code`) AS `address` FROM `table`

Таким образом, я получу полную строку их адреса в address, которая отлично работает, но если некоторые поля будут пустыми, я получу много двойных пробелов. Как я могу устранить лишние пробелы? Есть ли более простой способ, чем выполнение IF () для каждого поля?

Ответы [ 3 ]

18 голосов
/ 26 февраля 2010
SELECT  CONCAT_WS(' ',  NULLIF(address1, ''),  NULLIF(address2, ''),  NULLIF(address3, ''),  NULLIF(address4, ''),  NULLIF(post_code, ''))
FROM    table

Если ваши пустые поля NULL на самом деле, вы можете опустить конструкции NULLIF:

SELECT  CONCAT_WS(' ',  address1, address2, address3, address4, post_code)
FROM    table
2 голосов
/ 26 февраля 2010

используйте CONCAT_WS вместо CONCAT

SELECT CONCAT_WS(' ',`address1`, `address2`,  `address3`,  `address4`,  `post_code`) AS `address` 
FROM `table`;
1 голос
/ 27 февраля 2010

Вместо IFNULL вы также можете использовать COALESCE, это сделано для этой задачи.

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