2010-11-08 101 views
15

我有一個CSV文件,我直接導入到SQL服務器表中。在CSV文件中,每列用逗號分隔。但我的問題是,我有一個列「地址」,並在此列中的數據包含逗號。所以發生的事情是,地址列的一些數據將轉到其他列將導入到SQL服務器。CSV數據中的逗號

我該怎麼辦?

+0

難道你不能使用另一個字符來分隔你的值,如';'? – romaintaz 2010-11-08 12:44:33

+0

@romaintaz - 這是處理逗號的錯誤方法。好的csv使用引號,然後用自己的引號逃脫引用。 – 2010-11-08 14:25:43

+0

我已經提供了像這些CSV,我必須與此管理。 – Sidharth 2010-11-09 05:14:55

回答

15

如果列中有一個逗號,那麼該列應該被單引號或雙引號包圍。那麼,如果該列裏面有一個單或雙引號應該收到逃生章程,通常CSV

的\

格式示例

 
ID - address - name 
1, "Some Address, Some Street, 10452", 'David O\'Brian' 
+1

+1這是正確的做法。但是「CSV」非常隨意,人們會做各種瘋狂的事情。 – 2010-11-08 12:55:34

+0

@gmagana - 同意了,我第一次使用它的時候記得,有一些令人頭痛的問題,直到我明白了3件主要事情。 1)你需要一個字段終止符,通常是一個逗號,2)你需要一個通常用雙引號括起來的字段,最好用雙引號括住所有字段,除非處理整數,3)當你使用字段時需要一個轉義字符在一個領域內,通常是一個\。格式化你的CSV這樣,你的生活將會變得如此簡單:) – Brady 2010-11-08 13:07:58

+0

當我直接導入CSV到SQL Server時,我該如何檢查這一點。 – Sidharth 2010-11-09 05:19:48

1

我建議使用另一種格式比CSV或嘗試使用其他字符作爲字段分隔符和/或文本分隔符。嘗試尋找數據中未使用的字符,例如|,#,^或@。單行的格式將變爲

|foo|,|bar|,|baz, qux| 

行爲良好的解析器不能將'baz'和'qux'解釋爲兩列。

或者,你可以編寫自己的導入巫術來修復任何問題。對於以後,你可能會發現這個Groovy skeleton有用的(不知道什麼語言你雖然很流利)

1

大多數系統,包括Excel,將允許列數據被封閉在單引號...

col1,col2,col3 'test1','my test2,with comma',test3

另一種選擇是使用Macintosh版本的CSV,它使用TAB作爲分隔符。

0

我不認爲加引號會主動幫助我建議的最好方法是用其他標記(如空間或其他東西)替換內容中的逗號。

replace(COLUMN,',',' ') as COLUMN 
1

解決數據問題逗號最好,最快,最簡單的方法是使用Excel來保存逗號分隔的文件,將其具有Windows的列表分隔設置逗號以外的東西(如管道後)。然後這會生成一個管道(或其他)分開的文件給你,然後你可以導入。這被描述爲here

0

將語音標記添加到雙面作品的選擇列中。如果列是TEXT,則還必須將該列作爲NVARCVHAR(MAX)將其轉換爲字符串。

SQLCMD -S DB-SERVER -E -Q "set nocount on; set ansi_warnings off; SELECT '""' + cast ([Column1] as nvarchar(max)) + '""' As TextHere, [Column2] As NormalColumn FROM [Database].[dbo].[Table]" /o output.tmp /s "," -W 
23

對於這個問題,解決辦法很簡單。 第一選擇=>平面文件源=>瀏覽文件=> 不是去「文本限定詞」由默認它沒有寫像(「)在這裏雙引號,然後按照嚮導

步驟的指令 - 首先選擇=>平面文件源=>瀏覽您的文件=>文本限定符(只寫),並按照嚮導的說明。

祝你好運

+5

謝謝!這是正確的答案,而且非常簡單。 – 2016-09-09 17:14:58

+1

今天之前從來沒有碰到過這個。這對我來說是正確的答案。 – durbnpoisn 2017-01-27 20:57:00

+1

這也適用於我。 SSMS的一個荒謬和混亂的默認是什麼! – Ben 2017-02-14 15:27:58