2010-12-16 3 views
0

Oracle에서 SQL Server로 데이터를 이동하여 여러 가지 이유로 개발자가 사용할 수 있도록하려고합니다. MSDN에서 Oracle NUMBER에서 SQL Server FLOAT 로의 적절한 매핑을 읽었습니다.Oracle과 SQL Server 사이의 데이터 정밀도 문제 - number와 float 값

우리는 이방인 수에 문제가 있습니다. 오라클에서는 5.2의 값을 가질 수 있으며, SQL Server에서는 정확하게 그렇지 않습니다. (한 자리에서 유효 자릿수가 크게 달라질 수 있습니다.)

동료가 Access를 사용하여 데이터 문제를보고있는 중이었습니다. SQL Server에서 하나의 필드가 5.2 인 거대한 테이블에서 쿼리를 수행했으며 Oracle과 동일한 개수를 가졌습니다.

select sum(samp_aliquot_size) from result where samp_aliquot_size = 5.6 

오라클의

내가, 6260.8 얻을 SQL 서버에 내가 6260.80000000009를 얻을 : 오라클과 SQL 서버 모두에서
select count(*) from result where samp_aliquot_size = 5.6 

, 내가 그래서 그 수가 1118을 얻을, 나는 모두의 합계를했다 .

이 요구 사항은 데이터가 "완전 일치"라고합니다. 이를 달성하는 가장 좋은 방법은 무엇입니까?

답변

0

"이 요구 사항은 데이터가"완전 일치 "라고 말합니다.이를 달성하는 가장 좋은 방법은 무엇입니까?" Oracle에서 SQL Server로 이항 합리성을 이동하는 것입니다. 그런 다음 SQL Server는 이진 합리성의 십진수 표현을 계산할 수 있습니다. 십진수를 계산할 때 오라클이 요구 한 정확도 양식이 무엇인지 알고 있습니까?

이항 합리성을 사용할 수없는 경우; SQL Server에서 Oracle 값을 varchar 문자열로 이동해야합니다. 문자열로 변환하면 Oracle에서 계산 한 이항 합리성의 "정확한"표현을 유지합니다. 나는 숫자 변환이 부정확 여기서 찾을 수에 intrested입니다

:

나는 나의 이항 합리적인 해상력이 위키 백과 link을 사용했다. 위치를 확인하려면 데이터를 두 개의 SQL Server 열로 가져올 수 있습니다. 한 열은 varchar로, 다른 열은 float로 가져올 수 있습니다. 가져 오기 후 varchar가 아닌 행 목록을 출력합니다 (varchar로 실제)

+0

내가 잘못 했나요? varchar로 필드를 가져 오면 올바르게 보이지 않아야합니까? id 필드가있는 temp SQL 테이블이 있고 float, decimal (38,17) 및 nvarchar (100) 필드가 세 번 나타납니다. 내 SSIS 패키지에서 첫 번째 직선을 복사하고 데이터 변환을 통해 소수점 17 자 및 유니 코드 문자열 길이 100을 다른 두 자릿수로 만듭니다. 값은 (0.005, 0.00500000000000000, 5.00000000000001E-3) 및 (0.1, 0.10000000000000000, 0)입니다.10000000000000001). 마지막 부분 인 STRING 필드가 왜 부정확합니까?! – thursdaysgeek

+0

문자열은 부정확성을 나타내는 문자열이 아닙니다. 문자열 디스플레이에는 십진법 표시와 VS의 두 가지 위치가 더 있습니다. 나는 오라클로부터 전환하는 동안 반올림이 있다고 믿는다. 값을 SQL로 변환하기 전에 숫자를 Oracle의 문자 값으로 캐스팅하고 모든 데이터가 정확한지 확인하십시오. –

+0

SQL Server 고객 지원팀에서이 aticle을 발견했습니다. http://blogs.msdn.com/b/psssql/archive/2010/11/01/how-it-works-sql-paring-of-number-s-numeric-and-float-conversions.aspx –

0

매핑 테이블은

NUMBER([1-38]) -> NUMERIC([1-38]) 

당신이 오히려 Oracle's documentation 국가 번호

을 감안할 때 (SQL 서버 일치하는)는 오라클의 더 제한 DECIMAL 범위 내에있는 경우 부동보다 SQL Server의 정밀도를 고정 된 것으로 간주 적이 보여줍니다 어쨌든 해결되었습니다. And here

+0

오라클은 NUMBER (p, s)를 사용하지 않고 단지 NUMBER 만 사용하고 있습니다. 그래서 한 분야에서 33293, 3.4, 0.0000000382493을 가질 수 있습니다. 그들이 말했듯이, 그들은 격렬하게 변화 할 수 있고 변화 할 수 있습니다. 오라클에 5.2가 있고 5.200000000000000이 있으면 그 중 하나와 실제로 일치하지 않습니까? 존재하지 않는 정확성을 의미하지는 않습니까? – thursdaysgeek

+0

@thursdaysgeek : 예, 이질적인 데이터 유형 매핑은 정밀도가 부족함을 의미합니다 ... – gbn