Как преобразовать дату 2000 года в дату SQL в SSIS? - PullRequest
1 голос
/ 01 февраля 2011

Я использую 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 ]

2 голосов
/ 02 февраля 2011

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

(DT_DBDATE) ((DT_STR) (AS400 + 19000000))
1 голос
/ 20 июня 2011
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
1 голос
/ 03 февраля 2011

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

1. ((DT_WSTR,8)(<<AS400>> + 19000000)) 
2. (DT_DBDATE)(SUBSTRING(DCDateString,1,4) + "-" + SUBSTRING(DCDateString,5,2) + "-" + SUBSTRING(DCDateString,7,2))
1 голос
/ 02 февраля 2011

Сначала добавьте начальные нули в задачу производного столбца:

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. Затем вы можете преобразовать это или разделить на части даты, как требуется.

0 голосов
/ 13 января 2018

Если я правильно помню, дата отметки века не восходит к 1900 году, а скорее имела отношение к произвольной дате. Возможно, вы захотите проверить справочники AS400, связанные с датами 2000 года. Я запрограммировал на AS400 с 1992 по 2005 год. Годы перерыва - 1939 и 2039. Дата до или после них соответственно не соответствует системе отметок столетия. Это связано с тем, что IBM решила, что любые двухзначные числа, превышающие 39, относятся к 1900-м годам, а все, что меньше или равно 39, относятся к 2000-м годам. Если вы имеете дело с будущими датами, это может вызвать затруднение.

...