2010-02-26 35 views
8

Tôi có một db MySQL với một danh sách mọi người, bao gồm địa chỉ của họ, mà tôi muốn trả về dưới dạng một trường trong truy vấn. Nó chia thành address1, address2, address3, address4, post_code và tôi muốn làm một cái gì đó như sauCác trường nối MySQL nhưng bỏ qua các trường rỗng

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

Vì vậy, tôi sẽ kết thúc với một chuỗi đầy đủ các địa chỉ của họ trong address mà hoạt động tốt nhưng nếu một số lĩnh vực có sản phẩm nào sau đó tôi sẽ kết thúc với rất nhiều không gian đôi. Làm cách nào để loại bỏ các khoảng trống thừa? Có cách nào dễ hơn làm IF() trên mỗi trường?

Trả lời

17
SELECT CONCAT_WS(' ', NULLIF(address1, ''), NULLIF(address2, ''), NULLIF(address3, ''), NULLIF(address4, ''), NULLIF(post_code, '')) 
FROM table 

Nếu lĩnh vực có sản phẩm nào của bạn đang NULL trên thực tế, bạn có thể bỏ qua NULLIF cấu trúc:

SELECT CONCAT_WS(' ', address1, address2, address3, address4, post_code) 
FROM table 
2

CONCAT_WS sử dụng thay vì CONCAT

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

Thay vì IFNULL, bạn cũng có thể sử dụng liên hiệp , nó được thực hiện cho nhiệm vụ này.

Các vấn đề liên quan