2017-04-13 68 views
0

下面是SQL查詢:如何刪除/避免SQL輸出特定字符串

select '"'|| trim(COLUMN1) ||'"|"'|| trim(COLUMN2) ||'"|"'|| trim(COLUMN3) ||'"' 
from TABLE1 where .... 

我得到的輸出是:

"DATA1"|""|"DATA3" 

"DATA4"|""|"DATA6" 

不過,我希望它顯示等的輸出如下:

"DATA1"||"DATA3" 

"DATA4"||"DATA6" 

這意味着,如果有某個特定列的空值,它不能顯示「」。我希望你們都明白了。 請幫助我實現這一目標,因爲我將輸出文件直接傳輸到目標應用程序的這一過程自動化(即我將無法手動修改)。 謝謝!

+0

你應該清楚你是否要應用抑制剛剛'COLUMN2'或在投影中的所有列。也就是說,「COLUMN1」或「COLUMN3」可以爲空嗎?如果是這樣,輸出結果如何?解決方案將有微妙的不同。 – APC

+0

另外,這是用於生成管道分隔文件(即使用不同分隔符的CSV)的解決方案嗎? – APC

回答

0

替換功能

select replace('"'|| trim(COLUMN1) ||'"|"'|| trim(COLUMN2) ||'"|"'|| trim(COLUMN3) ||'"', '""','') 
from TABLE1 where .... 
+0

如果列值包含字符串'「」'會發生什麼? – MT0

+0

@ MT0然後它被取代以及:)冷靜的權利! –

+0

不是。如果'COLUMN2'的值是'您可以使用雙引號「來創建一個字符串,那麼您的輸出將是'您可以使用雙引號創建一個字符串,這將改變OP試圖顯示的數據。 – MT0

0

使用

REPLACE(String, '""', '') 

select REPLACE('"'|| trim(COLUMN1) ||'"|"'|| trim(COLUMN2) ||'"|"'|| trim(COLUMN3) ||'"', '""', '') from TABLE1 where .... 
+0

如果列值包含字符串'「」'會發生什麼? – MT0

2

您可以使用case避免打印任何東西,如果該列是null

select '"'|| trim(COLUMN1) || '"|' || 
     case when COLUMN2 is null then '' else '"' || trim(COLUMN2) || '"' end 
     || '|"' || trim(COLUMN3) ||'"' 
from TABLE1 where .... 
1

您可以使用NVL2(value, value_if_not_null, value_if_null)

SELECT NVL2(COLUMN1, '"' || TRIM(COLUMN1) || '"', NULL) 
     || '|' || NVL2(COLUMN2, '"' || TRIM(COLUMN2) || '"', NULL) 
     || '|' || NVL2(COLUMN3, '"' || TRIM(COLUMN3) || '"', NULL) 
FROM table1 
WHERE -- ... 

或者CASE

SELECT CASE WHEN COLUMN1 IS NOT NULL THEN '"' || TRIM(COLUMN1) || '"' END 
     || '|' || CASE WHEN COLUMN2 IS NOT NULL THEN '"' || TRIM(COLUMN2) || '"' END 
     || '|' || CASE WHEN COLUMN3 IS NOT NULL THEN '"' || TRIM(COLUMN3) || '"' END 
FROM table1 
WHERE -- ... 
+0

非常感謝MT0。它現在真的很完美。 –

+1

嗨@GAURAVSHARMA,如果這或任何答案已解決您的問題,請點擊複選標記考慮[接受它](http://meta.stackexchange.com/q/5234/179419)。這向更廣泛的社區表明,您已經找到了解決方案,併爲答覆者和您自己提供了一些聲譽。沒有義務這樣做。 –