2016-10-03 5 views
0

Я пытаюсь загрузить файл CSV с использованием MS-SSIS 2012. Даты в CSV форматируются как;SSIS Работа с датами и нулевыми датами?

1900-12-12 
1987-01-23 
.. etc 

Я написал этот кусок кода для преобразования даты из строки в дату, а затем исправить нулевые значения (не каждая строка всегда имеет дату)

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

Это работало нормально, пока в моем файле не было значений NULL. Есть идеи?

+0

Можете ли вы разместить сообщение об ошибке, пожалуйста? –

+0

[Исходная колонка [40]] Ошибка: при попытке выполнить литье типов произошла ошибка. [Производная колонка [40]] Ошибка: код ошибки SSIS DTS_E_INDUCEDTRANSFORMFAILUREONERROR. «Исходная колонка» потерпела неудачу, так как произошел код ошибки 0xC0049064 и расположение строки ошибки в «Производный столбец. Выходы [Производный вывод столбца]. Колонки [Datumformat]» указывает на ошибку при ошибке. Произошла ошибка в указанном объекте указанного компонента. До этого могут появляться сообщения об ошибках с дополнительной информацией о сбое. –

ответ

0

Попробуйте этот. Немного менее сложный и немного быстрее, чем ваш код :)

(DT_DATE) (ISNULL(Geboortedatum) ? "1900-01-01" : (SUBSTRING(Geboortedatum,1,4) + "-" + SUBSTRING(Geboortedatum,6,2) + "-" + SUBSTRING(Geboortedatum,9,2))) 
+0

Спасибо за помощь. Я получаю ту же ошибку. В моем файле CSV даты между кавычками, например; «2015-01-01», и когда он пуст, он отображается как «». Может быть, это не считается «истинным» значением NULL? –

+0

попытайтесь удалить кавычки в теге атрибута текста в редакторе диспетчера соединений с плоским файлом, добавив " –

0

Это выполнило эту задачу .. похоже, что это не было истинное значение null.

(DT_DATE)(TRIM(Geboortedatum) == "" ? "1900-01-01" : (SUBSTRING(Geboortedatum,1,4) + "-" + SUBSTRING(Geboortedatum,6,2) + "-" + SUBSTRING(Geboortedatum,9,2))) 
Смежные вопросы