#date #csv #ssis
#Дата #csv #ssis
Вопрос:
Я пытаюсь загрузить файл CSV с помощью MS-SSIS 2012. Даты в формате CSV форматируются как;
1900-12-12
1987-01-23
.. etc
Я написал этот фрагмент кода, чтобы преобразовать даты из строки в дату, а затем исправить значения null (не в каждой строке всегда есть дата)
(DT_DATE)(SUBSTRING(ISNULL(Geboortedatum) ? "1900-01-01" : Geboortedatum,1,4) "-" SUBSTRING(ISNULL(Geboortedatum) ? "1900-01-01" : Geboortedatum,6,2) "-" SUBSTRING(ISNULL(Geboortedatum) ? "1900-01-01" : Geboortedatum,9,2))
Это не удается.. Мой оригинал был;
(DT_DATE)(SUBSTRING(Geboortedatum,1,4) "-" SUBSTRING( Geboortedatum,6,2) "-" SUBSTRING(Geboortedatum,9,2))
Который работал нормально, пока я не получил нулевые значения в моем файле. Есть идеи?
Комментарии:
1. Не могли бы вы опубликовать ошибку, пожалуйста?
2. Ошибка [Производный столбец [40]]: произошла ошибка при попытке выполнить приведение типов. [Производный столбец [40]] Ошибка: код ошибки SSIS DTS_E_INDUCEDTRANSFORMFAILUREONERROR. Произошел сбой «Производного столбца», поскольку произошел код ошибки 0xC0049064, и расположение строки ошибки в «Производном столбце. Выводит [Вывод производного столбца]. Столбцы [Datumformat]» указывает сбой при ошибке. Произошла ошибка в указанном объекте указанного компонента. Перед этим могут быть опубликованы сообщения об ошибках с дополнительной информацией о сбое.
Ответ №1:
Попробуйте это. Немного менее сложный и немного быстрее, чем ваш код 🙂
(DT_DATE) (ISNULL(Geboortedatum) ? "1900-01-01" : (SUBSTRING(Geboortedatum,1,4) "-" SUBSTRING( Geboortedatum,6,2) "-" SUBSTRING(Geboortedatum,9,2)))
Комментарии:
1. Спасибо за вашу помощь. Я получаю ту же ошибку. В моем CSV-файле даты заключены в кавычки, например; «2015-01-01», а когда он пуст, он отображается как «». Может быть, это не считается «истинным» нулевым значением?
2. попробуйте удалить кавычки в теге текстового квалификатора в редактировании диспетчера соединений с плоским файлом, добавив »
Ответ №2:
Это сделало свое дело .. похоже, что это не было истинным нулевым значением.
(DT_DATE)(TRIM(Geboortedatum) == "" ? "1900-01-01" : (SUBSTRING(Geboortedatum,1,4) "-" SUBSTRING(Geboortedatum,6,2) "-" SUBSTRING(Geboortedatum,9,2)))