2011-01-21 4 views
1

SSIS의 DT_R8 인 정수를 10 진수로 어떻게 변경합니까? 소수점이 있고 일부는 Excel 스프레드 시트에서 변환하지 못합니다. 예를 들어 나는 다음을 가질 수있다 :SSIS에서 정수로 소수 자릿수로 변경

8512 
8134.5 
8003.27 
7964.97 
7250 

이드 그들을 위해처럼 모든이를 읽어

8512.00 
8134.50 
8003.27 
7964.97 
7250.00 

필자는 내 파생 열에서 DT_DECIMAL,2를 사용하여 시도했지만 작동하지 않는 것 같습니다. (DT_DECIMAL,2)((DT_DECIMAL,2)[Debit Amt])

감사

+0

결과로 얻고있는 것은 무엇이며 어떤 오류가 있습니까? – HLGEM

+0

@HLGEM 안녕하세요, 내가 쿼리를 실행할 때 나는 소수점을 가진 모든 수치를 얻지 못한다. 원본 파일 8512의 결과를 얻지 만 8512.00으로 변경하려고합니다. 일부에는 십진수가 없으며 일부는 십진수의 일부 (예 : 1234.5이지만 1234.50이어야 함)와 일부는 십진수가 올바르게 설정되어 있습니다. 나는 변환이 너무 어려워서 변환하지 못하고있다. – GabrielVa

+0

((DT_DECIMAL, 2) [Debit Amt] * 1.000001) ?? – GabrielVa

답변

0

내가 올바르게 입력을 이해하고 출력 Excel 스프레드 시트 인 경우 다음과 같이 나는 그것을있다. http://technet.microsoft.com/en-us/library/ms141683.aspx

데이터 유형 :에서

. Excel 드라이버 은 제한된 데이터 집합 만 인식합니다. 예를 들어 모든 숫자 열은 (DT_R8)으로 해석되며 모든 문자열 열 (메모 열보다 )은 255 자 유니 코드 문자열 (DT_WSTR)로 해석됩니다. 다음과 같이 통합 서비스가 엑셀 데이터 형식 매핑 :

숫자를 - 배정 밀도 부동 소수점 (DT_R8) 그래서

, 나는 유일한 해결책이 합치, 스프레드 시트의 문자열처럼 저장하는 것입니다 생각 오른쪽에 필요한만큼 0을 지정하십시오. 다음은 3 자릿수의 정밀도를 가진 파생 열의 코드입니다.

FINDSTRING((DT_WSTR,50)(DT_DECIMAL,3)[Debit Amt],",",1) == 0 ? (DT_WSTR,50)(DT_DECIMAL,3)[Debit Amt] + ",000" : (DT_WSTR,50)(DT_DECIMAL,3)[Debit Amt] + REPLICATE("0",4 - LEN(SUBSTRING((DT_WSTR,50)(DT_DECIMAL,3)[Debit Amt],FINDSTRING((DT_WSTR,50)(DT_DECIMAL,3)[Debit Amt],",",1),LEN((DT_WSTR,50)(DT_DECIMAL,3)[Debit Amt])))) 
관련 문제