Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
некорректная выборка больших значений
|
|||
|---|---|---|---|
|
#18+
Есть два сервера - '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. Кто-нибудь готов это прокомментировать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2002, 10:48 |
|
||
|
некорректная выборка больших значений
|
|||
|---|---|---|---|
|
#18+
У float есть еще аргумент, который задает число бит, в которых хранится мантисса. У тебя, видимо, это число задано таким, что хранится всего 5-7 цифр мантиссы, а константы к ним приводятся, есно с отрубанием хвоста. Любые чудеса здесь вполне возможны и объяснимы. Не используй float вообще, а особенно в сравнении на равенство. Float можно использовать только для приблизительных значений, например, в нем стоило бы хранить расстояние от земли до солнца. В MSSQL есть точные типы для десятичных чисел decimal, numeric и money. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2002, 12:37 |
|
||
|
некорректная выборка больших значений
|
|||
|---|---|---|---|
|
#18+
Дело в том, что для меня это поле и его тип - это данность. Что касается мантиссы, то я про это думал, но точность установлена в 53 разряда, так что все должно помещаться. И еще хочу обратить внимание что эта проблема возникает только при работе с подлинкованным сервером, даже если прилинковать сервер самого к себе - будет эта ошибка. Но заметь, openquery() отрабатывает нормально, потому как запрос выполняется непосредственно на удаленном сервере. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2002, 13:26 |
|
||
|
некорректная выборка больших значений
|
|||
|---|---|---|---|
|
#18+
Мда, печально. А если запрос написать так: select * from main.foliobase.dbo.test where CAST(unicum_num AS money)= $14898393 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2002, 13:36 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32020986&tid=1824280]: |
0ms |
get settings: |
8ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
54ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
2ms |
| others: | 254ms |
| total: | 406ms |

| 0 / 0 |
