Как загрузить дату из файла в таблицу сервера SQL, а также обработать другие символы в SSIS - PullRequest
0 голосов
/ 22 января 2019

Я новичок в SSIS и пытаюсь импортировать файл CSV в таблицу сервера SQL с помощью SSIS.В файле CSV есть столбец для даты, и я установил тип данных как DT_DATE.Формат даты MM/dd/yyyy.Однако для месяцев и дат менее 10 он не имеет начальных нулей, т. Е. March 7, 2012 находится в файле 3/7/2012.Строки, которые не имеют значений даты, имеют символ -.Может кто-нибудь помочь мне, как загрузить эти данные в SQL-сервер.Я предполагаю, что дата 3/7/2012 будет загружена в таблицу без проблем.Однако я хочу обработать тире и загрузить их как NULL в SQL-сервер.Могу ли я использовать производный столбец?Если значение - -, установите его на NULL, в противном случае введите значение даты как есть.Это правильно?

Я попробовал приведенный ниже код и получаю сообщение об ошибке.

ISNULL([Last Contacted Date]) || (DT_WSTR,1)[Last Contacted Date] == "-" || (DT_WSTR,0)[Last Contacted Date] == "" ? NULL(DT_DATE) : [Last Contacted Date]

Для столбца Дата получения последнего контакта я установил для свойств Ошибка и усечение значение "Игнорировать неудачу ", и работа прошла нормально.

Однако, когда я запускаю задание SSIS, данные загружаются в таблицу сервера SQL, но последняя дата обращения ко ВСЕМ записям в таблице сервера SQL равна NULL.Файл содержит несколько строк, в которых значение является действительной датой.

Может кто-нибудь помочь?

1 Ответ

0 голосов
/ 16 февраля 2019

В диспетчере соединений с плоскими файлами задайте тип столбца DT_WSTR соответствующей длины, затем используйте производный столбец со следующим выражением:

REPLACENULL([Last Contacted Date],"") == "" ? NULL(DT_DATE) :
(DT_DATE)(RIGHT("0" +  [Last Contacted Date], FINDSTRING( [Last Contacted Date], "/", 1 ) - 1) 
+ "/" + 
RIGHT("0" + SUBSTRING([Last Contacted Date], FINDSTRING( [Last Contacted Date], "/", 1 ) +1, FINDSTRING( [Last Contacted Date], "/", 2 ) - FINDSTRING( [Last Contacted Date], "/", 1 ) - 1), 2)
+ "/" + 
RIGHT([Last Contacted Date],4))
...