2011-02-01 5 views
1

SSIS (SQL 2008)를 사용하여 AS400에서 데이터를 가져옵니다. 날짜 값은 7 자리 숫자로 400에 저장됩니다. 다음은 형식입니다. "CYYMMDD"C는 0 = 1900 및 1 = 2000 인 "세기 숫자"입니다. 파생 된 열과 스크립트 구성 요소를 조사했습니다. 나는 SSIS에 매우 익숙하며, 다른 경우들과 혼합 된 모든 주조는 저를 둔한 소년으로 만듭니다. 또한, 나는 선도 0을 잃고있다. 나는 그것들이 숫자 형인지 b/c인지 확신 할 수 없다. 그리고 만약 내가 문자열로 던지거나 그렇지 않으면 올바르게 볼 것이다. 아래는 SSIS를 사용하는 400에서 직접 가져온 후 SQL에서 보는 것입니다.SSIS에서 Y2K 날짜를 SQL 날짜로 변환하는 방법은 무엇입니까?

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 
+0

파생 된 열 두 개가 있어야합니다. 1. (DT_WSTR, 8) (<> + 19000000)) 2. (DT_DBDATE) (SUBSTRING (DCDateString, 1,4) + "-"+ SUBSTRING (DCDateString, 5,2) + "-"+ SUBSTRING , 7,2)) – JohnPDubya

답변

1

두 답변 중 어느 것도 100 %는 아니지만 두 가지 모두 내가 prob를 파악하는 데 도움이되었습니다. "올바른"것으로 표시 할 사람이 확실하지 않습니다. 여기에 제가 한 일이 있습니다. 두 개의 파생 된 열을 수행해야했습니다. 내가 올바르게 기억

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

당신은 파생 열 작업에서 앞의 0의 추가,

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

나는 19000000 부분에 놀랐다. 아주 간단합니다. 당신이 그 (것)들을 썼는 때 던지기는 일하지 않았다. DT_WSTR로 형변환 한 다음 dbdate 로의 형변환을 위해 '-'로 날짜 부분을 결합하십시오. 고마워, – JohnPDubya

1

첫째로이 표현을 사용할 수 있어야합니다 :

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

나는 당신의 대답과 CK의 약간을 사용했다. 어느 쪽도 100 % 일하지 않았습니다. 값에 대한 원래 날짜에 19000000을 더한 다음 변환하십시오. – JohnPDubya

1
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 
0

, 세기 마크 날짜 1900 년으로 돌아가, 오히려 임의의 날짜를해야했다하지 않았다. Y2K 날짜와 관련된 AS400 레드 북을 확인할 수 있습니다. 나는 1992 년에서 2005 년 사이에 AS400을 프로그래밍했다. 휴식 년수는 1939 & 2039이다.이 세기 전후의 날짜는 각각 세기 표식 시스템에서 실패한다. 이는 IBM이 39보다 큰 두 자릿수 연도가 1900을 가리킨 것으로 결정했기 때문에 2000 년을 기준으로 39보다 작거나 같은 것을 결정했기 때문입니다. 미래의 날짜를 다루는 경우, 이것은 걸림돌을 일으킬 수 있습니다.