Проблемы точности данных между Oracle и SQL Server - число против числа с плавающей запятой - PullRequest
0 голосов
/ 16 декабря 2010

Мы хотим переместить данные из Oracle на SQL Server и сделать их доступными для разработчиков по нескольким причинам.Я прочитал на MSDN , что правильное сопоставление из Oracle NUMBER - с SQL Server FLOAT.

У нас проблема с двоичными рациональными числами.В Oracle оно может иметь значение 5,2, и, похоже, в SQL Server это не совсем так.(Количество значащих цифр может сильно варьироваться в пределах одного поля.)

Сотрудник подключался к обоим с помощью Access и видел проблему с данными.В SQL Server я выполнил запрос к огромной таблице, в которой одно поле было равно 5,2, и получил то же число, что и Oracle.

select count(*) from result where samp_aliquot_size = 5.6

В Oracle и SQL Server я получил значение 1118.Итак, я сделал сумму от обоих:

select sum(samp_aliquot_size) from result where samp_aliquot_size = 5.6

и в Oracle я получаю 6260,8, в SQL Server я получаю 6260.80000000009.

Требования для этого говорят, что данные будут"полное совпадение".Каков наилучший способ достичь этого?

Ответы [ 2 ]

0 голосов
/ 16 декабря 2010

Ответ на ваш вопрос «Требования к этому говорят о том, что данные будут« точно соответствовать ». Каков наилучший способ добиться этого?»это перевести двоичный рациональный с Oracle на SQL Server.Затем SQL Server может вычислить десятичное представление из рационального двоичного разряда.Знаем ли мы, какова была запрошенная точность формы Oracle при вычислении десятичной дроби?

Если двоичное рациональное не доступно;значение Oracle следует перенести в строку varchar в SQL Server.Преобразование в строку сохранит «точное» представление двоичного рационального числа, рассчитанного Oracle.

Я использовал эту ссылку Википедии для моего рационального двоичного определения:

Мне интересно узнать, где числовое преобразование является неточным.Чтобы определить местоположение, вы можете импортировать данные в два столбца SQL Server, один столбец как varchar, а другой как float.После импорта выведите список строк, в которых varchar not = Cast (настоящий как varchar)

0 голосов
/ 16 декабря 2010

Таблица сопоставления также показывает

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

Рассматривали ли вы фиксированную точность в SQL Server, а не плавающую, если она находится в более ограниченном диапазоне DECIMAL Oracle (соответствует SQL Server)

Учитывая В документации Oracle указано, что NUMBER в любом случае исправлен. А здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...