Как преобразовать дату Y2K в SQL DATE в SSIS?

Я использую SSIS (SQL 2008) для переноса данных с AS400. Значения даты сохраняются в 400 как 7-значный цифровой номер. Вот формат: «CYYMMDD» C является «вековой цифрой», где 0 = 1900 и 1 = 2000. Я изучал производные столбцы и компоненты скрипта. Я очень новичок в SSIS, и все литье, требуемое в разных случаях, делает меня скучным мальчиком. Кроме того, я теряю ведущие нули. Я не уверен, что это b / c, они являются числовым типом, и я бы правильно их видел, если бы я ввел строку или нет. Ниже приводится то, что я вижу в SQL после прямого извлечения из 400 с использованием SSIS.

AS400 = Actual 101 01/01/1900 (I think these are "unknown" dates) 1231 12/31/1900 (I think these are "unknown" dates) 20702 07/02/1902 151231 12/31/1915 1000102 01/02/2000 1110201 02/01/2011 

Вы должны иметь возможность использовать это выражение

 (DT_DBDATE) ((DT_STR) (AS400 + 19000000)) 

Во-первых, добавьте начальный нуль в производную задачу столбца:

 RIGHT("000000000" + (DT_STR,10,1252)AS400,7) 

Передайте это другому заданию Derived column и используйте выражение для выполнения преобразования в зависимости от цифры века, например:

 SUBSTRING([Derived Column 2],1,1) == "0" ? (DT_UI4)[Derived Column 2] + 19000000 : (DT_UI4)SUBSTRING([Derived Column 2],2,8) + 20000000 

Который должен дать вам что-то вроде 20110201. Затем вы можете преобразовать это или отбросить его на дату, если необходимо.

Ни один из двух ответов не был на 100%, но оба помогли мне разобраться с проблемой. Не уверен, кого отмечать как «правильный» Вот что я сделал. Должно было сделать 2 производных столбца.

 1. ((DT_WSTR,8)(<<AS400>> + 19000000)) 2. (DT_DBDATE)(SUBSTRING(DCDateString,1,4) + "-" + SUBSTRING(DCDateString,5,2) + "-" + SUBSTRING(DCDateString,7,2))