SSIS, имеющие дело с датами и нулевыми датами?

#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)))