Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / некорректная выборка больших значений / 5 сообщений из 5, страница 1 из 1
18.01.2002, 10:48
    #32020974
Dimanch
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
некорректная выборка больших значений
Есть два сервера - 'main' и 'slave'. Они знают друг друга как 'linked server'. Так вот на запрос
select * from main.foliobase.dbo.test where unicum_num = 14898393.0
выдается

unicum_num ...
---------------
14898400.0

Тогда как
select * from openquery(main, 'select * from test where unicum_num = 14898393.0')отрабатывает нормально. В обратном направлении тоже самое. Я заметил, что сервер округляет до сотен, т.е. если искать unicum_num=14898343.0, то он находит unicum_num=14898300.0. Причем округление не результата, а условия отбора. Я заметил это на рабочей таблице, создал тестовую - то же самое. Если уменьшить искомое число на порядок, округление уменьшается также на порядок. Поле unicum_num типа float, версия 7.0. Кто-нибудь готов это прокомментировать?
...
Рейтинг: 0 / 0
18.01.2002, 12:37
    #32020981
некорректная выборка больших значений
У float есть еще аргумент, который задает число бит, в которых хранится мантисса. У тебя, видимо, это число задано таким, что хранится всего 5-7 цифр мантиссы, а константы к ним приводятся, есно с отрубанием хвоста. Любые чудеса здесь вполне возможны и объяснимы.
Не используй float вообще, а особенно в сравнении на равенство. Float можно использовать только для приблизительных значений, например, в нем стоило бы хранить расстояние от земли до солнца.
В MSSQL есть точные типы для десятичных чисел decimal, numeric и money.
...
Рейтинг: 0 / 0
18.01.2002, 13:26
    #32020985
Dimanch
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
некорректная выборка больших значений
Дело в том, что для меня это поле и его тип - это данность. Что касается мантиссы, то я про это думал, но точность установлена в 53 разряда, так что все должно помещаться. И еще хочу обратить внимание что эта проблема возникает только при работе с подлинкованным сервером, даже если прилинковать сервер самого к себе - будет эта ошибка. Но заметь, openquery() отрабатывает нормально, потому как запрос выполняется непосредственно на удаленном сервере.
...
Рейтинг: 0 / 0
18.01.2002, 13:36
    #32020986
некорректная выборка больших значений
Мда, печально.
А если запрос написать так:

select * from main.foliobase.dbo.test where CAST(unicum_num AS money)= $14898393
...
Рейтинг: 0 / 0
18.01.2002, 14:04
    #32020992
Dimanch
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
некорректная выборка больших значений
Да... так работает, впрочем как и приведение к целому... но все равно печально
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / некорректная выборка больших значений / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]