2017-10-05 86 views
1

我有這基本上保持地址MySQL的SELECT CONCAT條件

數據庫

表(tblAddress)看起來像這樣...

housename | housenumber | address1 | address2  | address3 | town  | postcode 
Banana House |   29 | Acacia Road | Yellow Skin Way |   | Nuttytown | W1 1MP 

當我搜索基於一個郵政編碼我想成爲數據庫能夠返回和結果是這樣的...

Banana House,29 Acacia Road,Yellow Skin Way,Nuttytown,W1 1MP 

所以我需要housenumber與地址1連接如果地址1填充。如果不是,則用地址2或地址3連接。然後按照示例的其餘地址。

我嘗試使用IF和CASE語句,但似乎無法得到任何接近我後的輸出。

希望是有道理的。

回答

2

您可以通過添加少量的concat操作做到這一點。

檢查下面的代碼它應該工作。

SELECT CONCAT(housename, CONCAT(" ",CONCAT(housenumber, CONCAT(" ",CONCAT_WS(' ,', 
        NULLIF(address1, ''), 
        NULLIF(address2, ''), 
        NULLIF(address3, ''), 
        NULLIF(town, ''), 
        NULLIF(postcode, '')))))) AS concatedAddress FROM tblAddress; 
+0

我不是在等待最佳答案,我在測試他們進來時,他們快速進入。我會在完成測試後立即回覆並確認正確的答案。 – user3411176

+0

我現在已經測試過了,可以確認它的工作原理。只需稍作修改就可以在房屋名稱後添加逗號。感謝您爲我解決這個問題。非常感謝。 – user3411176

+0

歡迎您@ user3411176。繼續編碼:) –

0

使用concat_ws()(串聯與分離器)以及nullif()

SELECT CONCAT_WS(',', NULLIF(housename, ''), 
         NULLIF(housenumber, ''), 
         NULLIF(address1, ''), 
         NULLIF(address2, ''), 
         NULLIF(address3, ''), 
         NULLIF(town, ''), 
         NULLIF(postcode, '') 
     ) AS address FROM tblAddress 
+0

這將導致'香蕉樓,29,合歡路...'topicstarter問'香蕉樓,29路合歡...' –

+0

對不起我錯過了這一點,Amruth LS有正確的答案 – MrCarrot

0

嘗試像下面,

SELECT CONCAT_WS (", ", 
    housename, 
    CONCAT(housenumber, CONCAT_WS (", ", NULLIF(address1, ''), NULLIF(address2, ''), NULLIF(address3, ''))), 
    town, 
    postcode) AS address 
FROM tblAddress 
0

如何:

SELECT 
     housename 
     ,CONCAT(housenumber, CONCAT(' ', COALESCE(address1, '')), CONCAT(' ', COALESCE(address2, '')), CONCAT(' ', COALESCE(address3, ''))) AS address 
     ,town 
     ,postcode 
FROM tblAddress;