2014-04-10 8 views
1

SSIS에서 날짜 문자열을 datetime으로 변환하는 데 문제가 있습니다. 문제는 소스 데이터 저장소의 날짜가 m (m)/d (d)/yyyy인데, 즉 2014 년 3 월 8 일, 2014 년 10 월 5 일, 2014 년 12 월 22 일입니다. 이미 데이터 변환을 사용하려고 시도했지만 작동하지 않습니다. 또한 데이터 품질을 확인했으며 모두 이상하지 않습니다. 이상한 문자열이 아닙니다. 누구든지 패키지를 수정하는 방법을 알고 있습니까?SSIS에서 날짜 문자열을 datetime으로 변환

고맙습니다.

+0

어떻게 날짜를 변환하려고 했습니까? 어떤 유형, 형식을 사용 했습니까? 원본 형식이 문자열입니까? 아니면 SSIS에서로드하는 동안 datetime을 문자열로 변환하고 있습니까? –

+1

"이미 데이터 변환을 사용하려고했지만 작동하지 않습니다." 무엇을 시도 했습니까? 입력 데이터는 무엇이고 오류는 어떻게 생겼습니까? –

+0

@JonSkeet, 의견에 감사드립니다. 원본은 Excel 시트입니다. 데이터를 변환하기 전에 불규칙한 데이터를 없애기 위해 파생 된 열을 가져 와서이 필드를 비어 있거나 위 형식의 유니 코드 문자열로 남겨 두었습니다. 데이터 변환 변환에서 [DT_DBTIMESTAMP]와 같은 데이터 유형을 넣었습니다. 패키지를 실행하는 동안 오류가 발생했습니다. "잠재적 인 데이터 손실로 인해 값을 변환 할 수 없습니다." – user2683470

답변

1

이 경우 스크립트 변환을 사용합니다. 예를 들어 다음과 같이 훨씬 뛰어난 기능을 갖춘 .NET Framework를 활용할 수 있습니다. DateTime.TryParse.

1

먼저 유니 코드 문자열로 변환해야하며 이제 파생 열 요소로 변환 할 수 있습니다.

파생 열 번호 :

(DT_DATE)(SUBSTRING(col,FINDSTRING(col,"/",2) + 1,4) + "-" + 
      SUBSTRING(col,1,FINDSTRING(col,"/",1) - 1) + "-" + 
      SUBSTRING(col,FINDSTRING(col,"/",1) + 1,FINDSTRING(col,"/",2) - FINDSTRING(col,"/",1) - 1)) 

결과 :

col   NewDateColumn 
3/8/2014 2014-03-08 00:00:00.0000000 
10/5/2013 2013-10-05 00:00:00.0000000 
12/22/2014 2014-12-22 00:00:00.0000000 
-1

다음 날짜 (DT_TIMESTAMP)(DT_DBDATE)를 사용하여 날짜로 변환하는보십시오.

+0

OP 용 코드를 제공 할 수 있으면 매우 유용 할 것입니다. – jazzurro

1

이것은 내가 사용했던 것입니다. 그것은 col을 yyyy-MM-dd 형식으로 포맷 한 다음 DT_DBDATE로 변환하므로 날짜 문자열 만 원하면 래핑 된 캐스트를 제거 할 수 있습니다.

(DT_DBDATE)(SUBSTRING(MYCOL,FINDSTRING(MYCOL,"/",2) + 1,4) + "-" + RIGHT("0" + SUBSTRING(MYCOL,1,FINDSTRING(MYCOL,"/",1) - 1),2) + "-" + RIGHT("0" + SUBSTRING(MYCOL,FINDSTRING(MYCOL,"/",1) + 1,FINDSTRING(MYCOL,"/",2) - FINDSTRING(MYCOL,"/",1) - 1),2)) 
관련 문제