2012-09-07 2 views
2

SQL Server로 SSIS를 통해 Excel 파일을 가져옵니다. nvarchar에서 모든 것을 가져올 임시 테이블이 있습니다. 4 열에 대해서는 문자열을 돈형으로 캐스팅하고 목표 테이블에 넣습니다.돈을 데이터 형식에 대한 SQL Server 쉼표 구분 기호

내 임시 테이블에서이 네 개의 열 중 하나를 X라고하고 나머지는 구분 기호로 쉼표를 사용합니다. 왜 저에게 묻지 마십시오. SSIS의 모든 것을 똑같이 설정했습니다. 내 Excel에서는 구분 기호도 쉼표입니다.

그래서 지금은 쉼표 값에 모든 것을 가지고 있지만, X 열이 지금과 같이 오른쪽에 쉼표 두 장소를 이동하고 보이는 내 목표 테이블 :

537013,00 대신 5370,13 그것은 temp와 excel 컬럼의 원래 셀 값이었습니다.

나는 이것이 문화 설정 문제라고 생각했지만 다시이 모든 열에 대해 작동하거나해서는 안된다.

a) Excel에서 쉼표를 표시 할 때 임시 테이블에 도트 값을받는 이유는 무엇입니까?

b) 어떻게 해결할 수 있습니까? temp 테이블의 ","를 점으로 바꿀 수 있습니까?

UPDATE

나는 이유가 아니라 솔루션을 찾은 것 같아요 : 엑셀에서이 X 열에서

처음 3 개 개의 셀이 비어 - 0로 시작하는 모든 다른 세 개의 열이 나는 경우, 이 3 개의 셀을 0으로 채우면 임시 테이블에 점이 표시되고 목표 테이블에 올바른 값이 표시됩니다. 물론 Excel 파일을 그대로 사용해야합니다. 그것에 관한 아이디어가 있습니까?

답변

0

아래 코드를 사용해보십시오. money로 변환 할 문자열 값이 숫자 데이터 유형인지 여부를 확인합니다. 문자열 값이 숫자 데이터 유형이면 money 데이터 유형으로 변환하고 그렇지 않으면 NULL 값을 반환합니다. 또한 소수점 기호와 문자열 값의 숫자 그룹 기호를 SQL Server의 예상 소수점 기호 및 숫자 그룹 기호와 일치시킵니다.

DECLARE @MoneyString VARCHAR(20) 
SET @MoneyString = '$ 1.000,00' 
SET @MoneyString = REPLACE(REPLACE(@MoneyString, '.', ''), ',', '.') 
SELECT CAST(CASE WHEN ISNUMERIC(@MoneyString) = 1 
       THEN @MoneyString 
       ELSE NULL END AS MONEY) 

왜 쉼표로 표시되는 이유는 단서가 없습니다. 내 첫 번째 추측은 문화적 설정이지만 이미 확인했습니다. 인터넷 검색은 어떤 결과를 얻었습니까?

0

먼저 SQL에서 "구분 기호"는 소수점입니다. 단지 콤마를 사용하는 Excel에서만 사용됩니다. Excel에서 형식을 변경할 수 있습니다. 엑셀 열을 돈으로 형식을 지정하고 소수점을 구분 기호로 지정해야합니다. 그런 다음 SSIS 가져 오기 마법사에서 열의 변환을 분할하여 돈 데이터 형식으로 가져옵니다. 그것의 문화 일이 있지만, 구분 기호는 하나 개의 컬럼의 끝과 (CSV에서와 같이) 다음의 시작

HTH

+0

숫자 열이 모두 Excel에서 비어 있거나 텍스트가 포함될 수 있으므로 nvarchar 이외에는 사용할 수없는 이유가 있습니다 (사용자가 잘못 놓을 수 있음) – TonyC

0

잘 엑셀과 오랜 문제가 먹으 렴을 의미의 맥락에서 사용되는 경향이있다. 처음 30 개 정도의 행을 사용하여 데이터 유형을 추론합니다. 그것은 끝없는 문제로 이어질 수 있습니다. 귀하의 솔루션은 Yaroslav가 제안한 방식으로 모든 것을 문자열로 처리하거나 Excel에서 템플릿을 제공하여 미리 정의 된 데이터 형식의 데이터 형식 열을 삽입 한 다음 값이 삽입되도록해야한다고 생각합니다. 그 피타.

관련 문제