Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 BULK INSERT и тип данных "дата"  [new]
studieren
Member

Откуда: Tashkent, Uzbekistan
Сообщений: 2845
Приветствую форумчан!
Есть текстовый файл в формате .csv, где столбцы/поля отделяются друг от друга символом ";".
Есть там и столбец с типом данных "дата" в формате DD.MM.YYYY, т.е. в самом файле если открыть блокнотом даты выглядят как
"13.12.2014";…
"16.12.2014";…

Я с помощью BULK INSERT хочу импортировать данные в таблицу, но вот только с датой у меня проблемы. Как «объяснить» серверу, что там даты в формате DD.MM.YYYY?

Спасибо заранее.
19 дек 14, 14:38    [17023348]     Ответить | Цитировать Сообщить модератору
 Re: BULK INSERT и тип данных "дата"  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
studieren,

перед bulk insert выставить:

set dateformat dmy

ну или более радикально - логину язык на русский сменить.
19 дек 14, 15:24    [17023865]     Ответить | Цитировать Сообщить модератору
 Re: BULK INSERT и тип данных "дата"  [new]
studieren
Member

Откуда: Tashkent, Uzbekistan
Сообщений: 2845
daw,

К сожалению не получилось.
19 дек 14, 16:01    [17024256]     Ответить | Цитировать Сообщить модератору
 Re: BULK INSERT и тип данных "дата"  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
studieren
daw,

К сожалению не получилось.


что именно? set dateformat надо устанавливать непосредственно перед командой bulk insert, в той же сессии.
19 дек 14, 16:11    [17024333]     Ответить | Цитировать Сообщить модератору
 Re: BULK INSERT и тип данных "дата"  [new]
studieren
Member

Откуда: Tashkent, Uzbekistan
Сообщений: 2845
Пока нашёл такой костыль:
Открываю этот файл в Excel'е и меняю формат даты на "ГГГГММДД", после чего сохраняю и закрываю файл. После этого без проблем импортируются. Но вот только долго очень в Excel'е менять формат для несколько сотен тысяч записей. А хотелось бы не вручную все это проделать.
19 дек 14, 16:14    [17024360]     Ответить | Цитировать Сообщить модератору
 Re: BULK INSERT и тип данных "дата"  [new]
studieren
Member

Откуда: Tashkent, Uzbekistan
Сообщений: 2845
daw
studieren
daw,

К сожалению не получилось.


что именно? set dateformat надо устанавливать непосредственно перед командой bulk insert, в той же сессии.

Я именно так и сделал. Даже попробовал язык для логина перенастроить на Russian. Только ругается так:
Msg 4864, Level 16, State 1, Line 2
Bulk load data conversion error (type mismatch or invalid character for the specified codepage) for row 2, column 1 (SALE_DATE).
Msg 4864, Level 16, State 1, Line 2
Bulk load data conversion error (type mismatch or invalid character for the specified codepage) for row 3, column 1 (SALE_DATE).


SQL текст:
SET DATEFORMAT DMY;
BULK INSERT dbo.Test FROM 'C:\1.csv' WITH (FIELDTERMINATOR=';', FIRSTROW=2);
19 дек 14, 16:26    [17024424]     Ответить | Цитировать Сообщить модератору
 Re: BULK INSERT и тип данных "дата"  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
studieren,

так это из-за того, что даты у вас в кавычках. если у вас все значения в файле в кавычках - меняйте fieldterminator. если именно даты - тогда только через промежуточную загрузку в varchar, по-моему.
19 дек 14, 16:39    [17024510]     Ответить | Цитировать Сообщить модератору
 Re: BULK INSERT и тип данных "дата"  [new]
studieren
Member

Откуда: Tashkent, Uzbekistan
Сообщений: 2845
В BOLе пишут про "FORMATFILE". Как этот файл должен выглядеть и что там внутри нужно написать, чтобы сервер понял формат даты по другому?
19 дек 14, 16:43    [17024544]     Ответить | Цитировать Сообщить модератору
 Re: BULK INSERT и тип данных "дата"  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
studieren
В BOLе пишут про "FORMATFILE". Как этот файл должен выглядеть и что там внутри нужно написать, чтобы сервер понял формат даты по другому?


да, форматфайлом можно terminator свой для каждого столбца выставить.

как выглядеть - читать отсюда и далее по ссылкам:
http://technet.microsoft.com/en-us/library/aa337558(v=sql.105).aspx

что внутри написать - установить такие terminator-ы для столбцов, чтобы кавычки, в которые у вас обрамлены даты, были их частью.
19 дек 14, 16:54    [17024616]     Ответить | Цитировать Сообщить модератору
 Re: BULK INSERT и тип данных "дата"  [new]
o-o
Guest
studieren
меняю формат даты на "ГГГГММДД", после чего сохраняю и закрываю файл. После этого без проблем импортируются.

у меня в кавычках отказывается импортировать в любом виде.
а вот без кавычек все зависит от SET DATEFORMAT,
причем мне казалось, недостаточно будет только формат даты задать,
типа надо язык, чтобы и точку воспринял разделителем, но проканало и с точкой без смены языка (у меня сервер на английском вещает)
19 дек 14, 16:57    [17024654]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить