2014-02-06 17 views
2

我有如下表。城市,州和郵政編碼都是varchar類型,可以是NULL。使用SQL CONCAT和合並時顯示的值是空

MyContacts 
-id (int PK) 
-city (varchar null) 
-state (varchar null) 
-zipcode (varchar null) 

我想回到城市,州和郵編格式化爲一個單一的值,如下所示:

Seattle WA 98423 if all are not NULL 
Seattle WA if zip is NULL 
Seattle 98423 if state is NULL 
WA 98423 if city is NULL 
Seattle if state and zip is NULL 
WA if city and zip is NULL 
98423 if city and state is NULL 
NULL if all of them are NULL 

我一直在試圖像下面,但想到我會對此錯誤。由於有效

SELECT COALESCE(CONCAT(city," ",state," ",zipcode),CONCAT(city," ",states),zipcode) AS location 
+0

啊,看起來像我有倒退! – user1032531

回答

2
CASE WHEN COALESCE(city,state,zip_code) IS NOT NULL 
THEN 
    TRIM(REPLACE(CONCAT(IFNULL(city,""), 
        " ", 
        IFNULL(state,""), 
        " ", 
        IFNULL(zip code,"")), 
      " "," ")) 
ELSE 
    NULL 
END 

OR CONCAT_WS已經處理了NULL,所以我們並不需要它裏面空校驗。

CASE WHEN COALESCE(city,state,zip_code) IS NOT NULL 
THEN 
    CONCAT_WS(' ',city, 
        state, 
        zipcode) 
ELSE 
    NULL 
END AS location 
1

也許這?

SELECT CONCAT_WS(' ',COALESCE(city,''),COALESCE(state,''),COALESCE(zipcode,'')) AS location 
+0

Emtpy空間+空間給人留下了更多的空間。 –

+0

@OracleUser同意。我大概與還好,但因爲查詢說像你會把它應該返回NULL它不回答這個問題。 – user1032531