2010-02-26 4 views
8

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

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

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

ответ

17
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

использование CONCAT_WS вместо CONCAT

SELECT CONCAT_WS(' ',`address1`, `address2`, `address3`, `address4`, `post_code`) AS `address` 
FROM `table`; 
1

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

Смежные вопросы