powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / bcp. Как убрать кавычки в строках.
8 сообщений из 8, страница 1 из 1
bcp. Как убрать кавычки в строках.
    #40084567
sysn1k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Использую в cmd команду для вставки данных из файла .dsv:

bcp *name_tabl* IN '*path*' -t^| -c -C 65001 -S *name_server* -b 20000 -T -F 2

Столбцы разделяются |, но помимо этого все строки помещены в кавычки. Например: "RUS", "Оплата прошла", "10204022", "22,02" и т.д.

Пытался добавить -r (признак конца строки), но он убирает кавычку только у первого столбца и только в начале строки, а все остальные столбцы остаются прежними. Например: RUS", "Оплата прошла", "10204022", "22,02" и т.д..

Через стандартные инструменты SQL (импорт данных) эта проблема решается, но скорость загрузки бесконечная.
...
Рейтинг: 0 / 0
bcp. Как убрать кавычки в строках.
    #40084569
sysn1k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нужно ли добавлять в bcp команду -c (символьный тип), если данные в таблице имеют float, int, datetime тип данных?
...
Рейтинг: 0 / 0
bcp. Как убрать кавычки в строках.
    #40084583
sysn1k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sysn1k
Нужно ли добавлять в bcp команду -c (символьный тип), если данные в таблице имеют float, int, datetime тип данных?


на это можете не отвечать. Разобрался, когда -c использовать.
...
Рейтинг: 0 / 0
bcp. Как убрать кавычки в строках.
    #40084614
Wlr-l
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Однажды столкнулись с аналогичной задачей. Мы получали текстовый файл и загружали его в свою систему. Все было хорошо, пока не стал приходить файл, в котором, если в какой-нибудь строке встречается символ ", то он удваивается, а сама такая строка закавычивается этим символом.
Например, строка
Предприятие "Завод имени кого-то"
становится строкой
"Предприятие ""Завод имени кого-то"""

В результате анализа строк выяснили:
1. Любые две стоящие рядом кавычки — это одна кавычка в исходной строке.
2. Все остальные кавычки, где бы они не стояли, лишние.

Собственно решение состоит из трех шагов.
1. Чтобы сохранить информацию о парных кавычках заменим две стоящие рядом кавычки каким-нибудь невидимым символом, мне, например, нравится символ char(7) – звонок.
2. Оставшиеся кавычки заменим пустым символом.
3. Вернем кавычку на место.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
with A as (--пример исходных данных
  select *
    from (values ('"Предприятие ""Завод имени кого-то"""'),
                 ('"Кафе ""Классное"" ООО"'),
                 ('"""Инжиниринг какой-то"""'),
                 ('"Школ""а №22"'),
                 ('Школа №22')
         ) as t  (s)
)
select s
      ,replace(replace(replace(s, '""', char(7)), '"', ''), char(7), '"') as new_s
  from A;


Результат:

Код: plaintext
1.
2.
3.
4.
5.
6.
s					new_s
"Предприятие ""Завод имени кого-то"""	Предприятие "Завод имени кого-то"
"Кафе ""Классное"" ООО"			Кафе "Классное" ООО
"""Инжиниринг какой-то"""		"Инжиниринг какой-то"
"Школ""а №22"				Школ"а №22
Школа №22				Школа №22

Возможно, у нас не хватило квалификации заставить bcp сделать эти преобразования.
...
Рейтинг: 0 / 0
bcp. Как убрать кавычки в строках.
    #40084634
sysn1k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Wlr-l,
replace - это простой вариант. Но он очень время затратный. У меня файлы по 5гб, с 15 столбцов. В сумме на одну табл получается 30млн строк. Таких таблиц несколько. Запускать replace на каждый столбец - ад, т.к. максимум 10 млн строк можно за один раз обработать (иначе ругаются), приходится их делить. Одну таблицу так сделал - больше не хочется.
...
Рейтинг: 0 / 0
bcp. Как убрать кавычки в строках.
    #40084642
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Wlr-l
Все было хорошо, пока не стал приходить файл, в котором, если в какой-нибудь строке встречается символ ", то он удваивается, а сама такая строка закавычивается этим символом.

Это канонический стандарт CSV.
Это не беда - это счастье.
...
Рейтинг: 0 / 0
bcp. Как убрать кавычки в строках.
    #40084650
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sysn1k


Столбцы разделяются |, но помимо этого все строки помещены в кавычки. Например: "RUS", "Оплата прошла", "10204022", "22,02" и т.д.


можно избавиться от кавычек препроцессингом

например, так
Код: powershell
1.
2.
3.
4.
5.
6.
$Folder = "."
$objectsList = (Get-ChildItem -Path $Folder -Recurse -Filter "test.txt") | Select-Object -ExpandProperty FullName
foreach ($object in $objectsList) {
  $Line = (Get-Content -Path $object) -replace '"', ''
  Set-Content -Path $object -Value $Line
}

...
Рейтинг: 0 / 0
bcp. Как убрать кавычки в строках.
    #40084671
Wlr-l
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
aleks222
Wlr-l
Все было хорошо, пока не стал приходить файл, в котором, если в какой-нибудь строке встречается символ ", то он удваивается, а сама такая строка закавычивается этим символом.

Это канонический стандарт CSV.
Это не беда - это счастье.


Я то, об этом знаю. Это счастье.

Беда в том, что BULK об этом не знает, или я не знаю, как справиться с этим BALKом.
Как выясняется, я не один такой.

Еще в этом файле числа были с разделителями групп CHAR(160), которые выглядят, как пробел.
И еще одна беда в том, что с той стороны не знали, как справиться с кавычками и разделителями групп, и предложили нам самостоятельно избавляться от кавычек и от разделителей групп.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / bcp. Как убрать кавычки в строках.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]