Как преобразовать дату 2000 года в SQL DATE в SSIS?
Я использую SSIS (SQL 2008) для переноса данных с AS400. Значения даты сохраняются в 400 как 7-значное число. Вот формат: "CYYMMDD" C - это "цифра века", где 0 = 1900 и 1 = 2000. Я изучал производные столбцы и компоненты скрипта. Я очень новичок в SSIS, и все необходимые кастинги в разных случаях делают меня скучным мальчиком. Также я теряю ведущие нули. Я не уверен, что это ч / б, они имеют числовой тип, и я бы видел их правильно, если я приведу их как строку или нет. Ниже приведено то, что я вижу в 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
5 ответов
Ни один из двух ответов не был на 100%, но оба помогли мне выяснить проблему. Не уверен, кого пометить как "правильный" Вот что я сделал. Пришлось сделать 2 производных столбца.
1. ((DT_WSTR,8)(<<AS400>> + 19000000))
2. (DT_DBDATE)(SUBSTRING(DCDateString,1,4) + "-" + SUBSTRING(DCDateString,5,2) + "-" + SUBSTRING(DCDateString,7,2))
Вы должны быть в состоянии использовать это выражение
(DT_DBDATE) ((DT_STR) (AS400 + 19000000))
Во-первых, добавьте начальные нули в задачу производного столбца:
RIGHT("000000000" + (DT_STR,10,1252)AS400,7)
Передайте это другой задаче "Производный столбец" и используйте выражение для выполнения преобразования в зависимости от цифры века, например:
SUBSTRING([Derived Column 2],1,1) == "0" ? (DT_UI4)[Derived Column 2] + 19000000 : (DT_UI4)SUBSTRING([Derived Column 2],2,8) + 20000000
Что должно дать вам что-то вроде 20110201. Затем вы можете преобразовать это или измельчить в части даты, как требуется.
select substring(t1.datefield,4,2)|| '/' || substring(t1.datefield,6,2) || '/' || (cast(substring(t1.datefield,1,3) as integer) + 1900) as RegularDate from db.table1 t1
Если я правильно помню, дата отметки столетия восходит не к 1900 году, а скорее к произвольной дате. Возможно, вы захотите проверить справочники AS400, связанные с датами 2000 года. Я программировал на AS400 с 1992 по 2005 годы. Годы перерыва - 1939 и 2039. Дата до или после них соответственно не соответствует системе отметок века. Это связано с тем, что IBM решила, что любые двухзначные числа, превышающие 39, относятся к 1900-м годам, а все, что меньше или равно 39, относятся к 2000-м годам. Если вы имеете дело с будущими датами, это может вызвать затруднение.