Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Импорт даты из csv на SQL Server средствами bcp  (Прочитано 19477 раз)
0 Пользователей и 1 Гость смотрят эту тему.
SCRIBE
Гость
« : 26-07-2016 11:02 » 

Всем привет.

Буду благодарен за помощь вот в каком вопросе, тривиальная задача, загрузить данные в базу SQL Server из файла csv.
Только файл не простой, а б****ь золотой=)
Даты там необыкновенные живут, в виде "01.01.2015 0:00".
Саму выгрузку, т.е. формат этих дат в файле поменять нельзя (в смысле средствами программы которая их выгружает).
Знаю что сиквел любит кушать нормальные даты, вида "2015-01-01".
Параметр -R не помог, хоть дата и сходиться с системным форматом.
Можно ли вручную где-то прописать как ему эту дату кушать? Ну что-то типа ("01.01.2015 0:00", "dd.mm.yyyy H:mm")
sqlldr так могет, а эта зараза не хочет, форматы так не умеют, хоть xml хоть нет.
Перерыл много чего, не смог загрузить.
P.S. Импортером данные загружаються...
Буду рад за помощь   Скромно так...
« Последнее редактирование: 26-07-2016 12:55 от ..::SCRIBE::.. » Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 27-07-2016 04:42 » 

"сиквел" - это продолжение (новая часть фильма).
SQL читается "эскьюэл" Отлично  

по проблеме -

 можно попробовать сделать встроенную процедуру, которая приведёт строку в нужный вид перед вставкой

или ещё в программе, перед вставкой, пропарсить и исправить кривую строку
Записан

HandKot
Молодой специалист

ru
Offline Offline

« Ответ #2 : 27-07-2016 05:56 » 

..::SCRIBE::..
никаких проблем, только надо сделать файл формата иначе не хотит
в файле формата данный столбец описываешь как SQLCHAR (я вообще все так поля описываю)

вот мой пример файла
Код:
12.01.2016
31.12.2016
12.12.2016

файл формата
Цитата
10.0
1
1       SQLCHAR         0       0       "\r\n"   1     dt       ""

команда
Код:
bcp tempdb.dbo.test in "\\comp1\test.csv" -S Server1 -E -R -T -f \\comp1\test.fmt

хотя я лично уже чаще делаю так
Код:
select CONVERT(datetime, dt, 104) from OPENROWSET(BULK N'\\comp1\test.csv', FORMATFILE = N'\\comp1\test.fmt') x

Цитата: Алексей++
"сиквел" - это продолжение (новая часть фильма).
это так ласково называют MSSQL
Записан

I Have Nine Lives You Have One Only
THINK!
SCRIBE
Гость
« Ответ #3 : 27-07-2016 06:26 » 

Код:
12.01.2016
31.12.2016
12.12.2016

А у меня даты то:
Код: (Text)
text;12.01.2016 0:00;text;12.01.2016 0:00
text2;18.01.2016 0:00;text2;15.01.2016 0:00

Таблица:
Код: (Text)
create table test_table(col1 varchar(50), col2 datetime, col3 varchar(50), col4 datetime))

Файл формата:
Код: (Text)
11.0
4
1       SQLCHAR             0       0      ";"         1     col1 ""
2       SQLCHAR             0       0      ";"         2     col2 ""
3       SQLCHAR             0       0      ";"         3     col2 ""
4       SQLCHAR             0       0      "\r\n"     4     col4 ""

Параметры командной строки:
Код: (Text)
bcp Base.dbo.test_table in "\\comp\folder1\test_data.csv" -S ServerName -E -R -T -f "\\comp\folder1\test_format.fmt"

В ответ:
Код: (Text)
Error = [Microsoft][SQL Server Native Client 11.0]Invalid character value for cast specification
SQLState = 22005, NativeError = 0
И так раз 10, пока не вываливается...
Код: (Text)
BCP copy in failed

И да=)
Код:
OPENROWSET(BULK N'\\comp1\test.csv', FORMATFILE = N'\\comp1\test.fmt') x

Код: (Text)
You do not have permission to use the bulk load statement.

Добавлено через 50 минут и 28 секунд:
Да что за нафиг, скопировал полностью твой пример, работает, модифицировал, тоже работает, а мой нет  Не могу...

Во я мудак, забыл поменять название таблицы.
Все работает, большое спасибо.
« Последнее редактирование: 27-07-2016 07:29 от SCRIBE » Записан
HandKot
Молодой специалист

ru
Offline Offline

« Ответ #4 : 27-07-2016 08:07 » 

Да что за нафиг, скопировал полностью твой пример, работает, модифицировал, тоже работает, а мой нет  Не могу...

Во я мудак, забыл поменять название таблицы.
Все работает, большое спасибо.
можно ещё экспорт импорт использовать, только в настройках полей указать тип DT_DATE. Только вот тут не понятно, как он будет конвертировать, как бог на душу положит, как по региональным настройкам, ещё как-нибудь
Записан

I Have Nine Lives You Have One Only
THINK!
SCRIBE
Гость
« Ответ #5 : 27-07-2016 08:44 » 

Экспорт/Импорт работает отлично, никаких с ним проблем небыло. Только это же ручная работа, а значит рутина, а значит скучная, а значит увеличенное потребление алкоголя, а значит цироз печени.... ооохх куда цепочка завела  Отлично

Добавлено через 4 часа, 5 минут и 39 секунд:
И да, если через Экспорт/Импорт, то там региональные настройки ой как учитываются, сам проверил на числах с плавающей запятой, где разделитель точка/запятая. Впредь аккуратно выгружал такие числа в *csv.
(P.S. просто сам люблю разделитель "точка"  Скромно так...)
« Последнее редактирование: 27-07-2016 12:49 от SCRIBE » Записан
HandKot
Молодой специалист

ru
Offline Offline

« Ответ #6 : 27-07-2016 12:45 » 

Экспорт/Импорт работает отлично, никаких с ним проблем небыло. Только это же ручная работа, а значит рутина, а значит скучная, а значит увеличенное потребление алкоголя, а значит цироз печени.... ооохх куда цепочка завела  Отлично
дык сохранить как пакет и потом dtexec'ом запускать....цепочка оборвалась Улыбаюсь
Записан

I Have Nine Lives You Have One Only
THINK!
SCRIBE
Гость
« Ответ #7 : 27-07-2016 12:51 » new

Первый раз услышал о таком чуде света  Улыбаюсь
Гляну что да как, спасибо
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines