2013-03-15 109 views
6

我試圖使用命令提示符將一個sql查詢假脫機爲CSV文件,但是,我返回的一列數據包含逗號在數據中並導致數據進入下一欄。有沒有辦法解決這個問題?理想情況下,我希望這個特定的列在查詢中返回,而不是最後。當數據包含逗號時將sql假脫機爲CSV

我目前使用下面的命令:

set termout off; 
set colsep ','; 
set underline off; 
set feedback off; 
set pagesize 0; 
set linesize 1500; 
set trimspool on; 

我掌握設定COLSEP「」命令是問題但一直無法弄清楚如何處理替換它。有沒有人有任何建議?

此外,就在我的sql查詢之前,我使用select語句來提取標題信息。從雙重選擇'a,b,c';不知道這是否會影響答案。

+0

你使用的是什麼類型的sql?甲骨文? – PaulStock 2013-03-15 20:22:52

+0

通過控制M中的命令作業運行sql – user2175401 2013-03-15 23:54:22

回答

1

您可以修改您的查詢,該查詢通過用雙引號括起該列來返回結果集。假設b是罪魁禍首:

select a 
     , '"' || trim(B) || '"' as b 
     , c 
from your_table; 

正確的語法取決於當然你的RDBMS版本。

5

兩個潛在的答案。它們都不是完美的。如果你有一些結果逗號,但沒有管道(|),你可以切換到一個管道分隔與

set colsep '|' 

大多數軟件,可以讀取csv將做到這與該格式的罰款。

如果不適合你,你可以實現一列內治療逗號,你需要在引號來包裝每一個數據項:

"data 1","data 2","data,with,commas" 

要做到這一點,每一個分離器將必須","這樣你就可以

set colsep '","' 

這不會有引號開頭和每行的結束,這樣,那麼你可以用引號括每一行與sed

sed 's/^[^$]*$/"&"/' 
+1

如果值包含引號,則這將無法正常工作。 CSV中的引號需要用雙引號進行轉義。例如xyz「a」需要轉義爲xyz「」a「」 – summerian 2016-10-07 15:53:29

2

您可以修改您的選擇查詢像

select REPLACE(column_name, ',',' ') column name from table_name 

這會從空間列數據替換逗號值。