Запятые в данных CSV - PullRequest
       49

Запятые в данных CSV

17 голосов
/ 08 ноября 2010

У меня есть файл CSV, который я непосредственно импортирую в таблицу сервера SQL.В файле CSV каждый столбец разделен запятой.Но моя проблема в том, что у меня есть столбец «адрес», и данные в этом столбце содержат запятые.Итак, что происходит, так это то, что некоторые данные из столбца адреса отправляются в другие столбцы для импорта на сервер SQL.

Что мне делать?

Ответы [ 7 ]

39 голосов
/ 25 февраля 2015

для этой проблемы решение очень простое. сначала выберите => источник плоского файла => просмотрите файл => чем перейти к «Спецификатору текста» по умолчанию, его нет, напишите здесь двойную кавычку как (") и следуйте инструкциям мастера.

шаги - сначала выберите => источник плоского файла => просмотрите файл => квалификатор текста (только для записи) и следуйте инструкциям мастера.

удачи

17 голосов
/ 08 ноября 2010

Если в столбце есть запятая, то этот столбец должен быть заключен в одинарные или двойные кавычки.Затем, если внутри этого столбца есть одинарная или двойная кавычка, перед ним должен быть escape-чартер, обычно это \

Пример формата CSV

ID - address - name
1, "Some Address, Some Street, 10452", 'David O\'Brian'
1 голос
/ 07 ноября 2013

Лучший, самый быстрый и простой способ решения проблемы с запятой в данных - это использовать Excel для сохранения файла, разделенного запятыми, после того, как в Windows в качестве разделителя списка задано значение, отличное от запятой (например, канала).Затем он сгенерирует для вас отдельный файл (или любой другой), который вы затем сможете импортировать.Это описано здесь .

1 голос
/ 08 ноября 2010

В большинстве систем, включая Excel, данные столбцов можно заключать в одинарные кавычки ...

col1, col2, col3 'test1', 'my test2, с запятой', test3

Другой альтернативой является использование версии CSV для Macintosh, в которой в качестве разделителей используются символы табуляции.

1 голос
/ 08 ноября 2010

Я бы предложил либо использовать другой формат, чем CSV, либо попробовать использовать другие символы в качестве разделителя полей и / или разделителя текста. Попробуйте найти символ, который не используется в ваших данных, например, |, #, ^ или @. Формат одной строки станет

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

Парсер с хорошим поведением не должен интерпретировать 'baz' и 'qux' как два столбца.

В качестве альтернативы, вы можете написать собственный импортный вуду, который исправит все проблемы. Для более поздних версий этот Groovy скелет может оказаться полезным (хотя не уверен, на каких языках вы говорите свободно)

0 голосов
/ 21 января 2014

Добавление речевого знака в столбец выбора с обеих сторон работает. Вы также должны привести столбец как 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
0 голосов
/ 27 марта 2013

Не думаю, что добавление цитаты могло бы помочь. Лучший способ, который я предлагаю, - заменить запятую в контенте другими метками, такими как пробел или что-то в этом роде.

replace(COLUMN,',',' ') as COLUMN
...