2011-11-26 44 views
5

我有以下參考數據。SQL Select;串聯字符串,避免列爲空的雙逗號?

PERSON_NAME     STREET     TOWN    COUNTY   POSTCODE 
------------------------------ ------------------------ ---------------- ---------------- ---------- 
David Smith     30 Johnson Street  Norwich   Norfolk   NA38 3KL 
John Brown      Douglas Road    Cambridge       C8 9IJ  
Jackie White     8 High Street   Ipswich   Suffolk   IP7 2YT 
Andrea Blue     9 Marlborough Ave  Bury    Suffolk   IP4 0XC 
Jemima Green     Riverside Walk   Colchester  Essex   CO6 7PR 
James Gray      167 Hadleigh Place  London       SW1 4TU 

我想要做的,就是顯示人的名單,連同他們的地址連接成一個逗號分隔字符串。

這部分很簡單,我用||來連接列和放置逗號分隔符。

我有問題的部分是有些行沒有列出COUNTY,因此我需要避免顯示, ,

我已經爲自己做了一些研究,並決定在Oracle中使用SUBSTR來代替雙逗號,但它確實感覺有點「髒」。有沒有更簡單的方法來避免使用複雜的功能(例如this previous SO question)?

這是我有:

SELECT 
    SUPPNAME as "Supplier Name", 
    REPLACE(STREET || ', ' || TOWN || ', ' || COUNTY || ', ' || POSTCODE, ' ,','') as "Supplier Address" 
FROM 
    SUPPLIERS 
; 

感謝

回答

7

嘗試

SELECT 
SUPPNAME AS "Supplier Name", 
(
CASE WHEN STREET IS NULL THEN '' ELSE STREET || ', ' END || 
CASE WHEN TOWN IS NULL THEN '' ELSE TOWN || ', ' END || 
CASE WHEN COUNTY IS NULL THEN '' ELSE COUNTY || ', ' END || 
CASE WHEN POSTCODE IS NULL THEN '' ELSE POSTCODE END 
) AS "Supplier Address" 
FROM SUPPLIERS 
+2

我刪除了我的答案,因爲我發現開始嘗試這種方法來刪除一個多餘的「」在甲骨文串concats與空值不會產生空(因爲我相信它在SQL服務器),就像你所說的那樣。我開始轉向病例陳述,但後來看到了您的答案 - +1 –

+0

+1。 @Yahia - 你剛剛爲我節省了一大筆頭痛。謝謝! –

2

你可以使用NVL2周圍,可能是空的字段,財產以後像NVL2(county, county || ',', '')

3

在以前的答案,如果所有fiields是NULL,那麼你將只會得到愚蠢的','而不是預期的NULL。在結果

SELECT 
SUPPNAME AS "Supplier Name", 
SUBSTR(
    NVL2(STREET, ', ' || STREET, NULL) 
     || NVL2(TOWN, ', ' || TOWN, NULL) 
     || NVL2(COUNTY, ', ' || COUNTY, NULL) 
     || NVL2(POSTCODE, ', ' || POSTCODE, NULL) 
    ,2) AS "Supplier Address" 
FROM SUPPLIERS 
+0

這對我來說非常合適,我避免了尾隨逗號。 – user2710915

相關問題