2017-04-13 9 views
0
以下

SQLクエリです:削除する方法/ SQL出力の​​特定の文字列を避ける

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

私が手出力は次のようになります。

"DATA1"|""|"DATA3" 

"DATA4"|""|"DATA6" 

しかし、私はそれはのような出力を表示します次のようになります。

"DATA1"||"DATA3" 

"DATA4"||"DATA6" 

つまり、特定の列のNULL値がある場合、「」と表示されてはなりません。私はあなたがすべてそれを得たと思います。 出力ファイルで出力先アプリケーションに直接移動する(つまり、手動で変更することはできません)このプロセスを自動化しているので、これを達成するのを手伝ってください。 ありがとう!

+0

あなたがちょうど 'COLUMN2'や投影のすべての列に対して抑制を適用するかどうかを明確にすべきです。つまり、 'COLUMN1'または' COLUMN3'はnullになりますか?もしそうなら、出力はどのように見えますか?ソリューションは微妙に異なります。 – 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

列はあなたがNVL2(value, value_if_not_null, value_if_null)使用することができますnull

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

ある場合は、何も出力しないようにするためにcaseを使用することができます。

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)を検討してください。これは、あなたが解決策を見つけ出し、回答者とあなた自身の両方に評判を与えていることを広範なコミュニティに示します。これを行う義務はありません。 –

関連する問題