Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
float select...where
|
|||
|---|---|---|---|
|
#18+
У меня возникла следующая проблема! Ообъясните, пожалуйста. SQL Server 2000 Есть таблица: pole1 pole2 --------------- data1 35.8 data2 35.81 Делаю запрос: SELECT * FROM table1 WHERE (pole2 = 35.8 ) Ничего НЕ получается, а на запрос: Делаю запрос: SELECT * FROM table1 WHERE (pole2 = 35.81) выдается соответственно вторая строка. Т.е. сравнение может происходить только если не менее двух знаков после запятой! А занести в таблицу 35.80 нельзя. Как решить? Может есть какие-то настройки? Или я что-то конкретно не понимаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2002, 14:14 |
|
||
|
float select...where
|
|||
|---|---|---|---|
|
#18+
дело не в количестве знаков, просто храниться оно в неком двоичном виде и хоть выводиться как 3.8, может содержать и еще какие разряды. попробуйте так: WHERE round(pole2,1) = 35.8 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2002, 14:35 |
|
||
|
float select...where
|
|||
|---|---|---|---|
|
#18+
Некоторые рассуждения не совсем в тему. Сначала я думал, что такая ситуация обычно возникает когда точность представления float числа при вставке и/или сравнении больше точности поля в таблице, т.е. следующий код не должен возвращать записей: create table #tt1 (name char(1), val float(24)) insert into #tt1 values ('a',35.800000001) select * from #tt1 where ( val = 35.800000001 ) drop table #tt1 но не тут то было! интересно, неужели SQL приводит 35.800000001 в выражении "val = 35.800000001" к float(24)? create table #tt1 (name char(1), val float(24)) insert into #tt1 values ('a',35.800000001) select * from #tt1 where ( val = cast(35.800000001 as float(53)) ) -- работает! select * from #tt1 where ( val = cast(35.800000001 as float(24)) ) -- работает! select * from #tt1 where ( cast(val as float(53)) = 35.800000001 ) -- нет! drop table #tt1 из чего можно сделать вывод: если внести во float(n) поле любой точности значение любой точности, то последующая выборка с where field = <исходное значение> всегда отдаст нужные строки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2002, 08:03 |
|
||
|
float select...where
|
|||
|---|---|---|---|
|
#18+
можно и другие выводы сделать, например: при сравнении поля с константой значение константы приводиться к типу поля а вобще это чисто теоритические рассуждения, не имеющие к жизни никакого отношения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2002, 13:38 |
|
||
|
float select...where
|
|||
|---|---|---|---|
|
#18+
>>при сравнении поля с константой значение константы приводиться к типу поля а это зависит от compatibility-level. Однако операции CAST/CONVERT не могут понизить точность переменных и полей типа float! По крайней мере в SQL70. пример: create table #tt1 (name char(1), val float(53)) insert into #tt1 values ('a',35.800000001) declare @a float(24) declare @b float(24) set @a = 35.800000001 select @b = cast(val as float(24)) from #tt1 select (@a - @b) from #tt1 --возвращается 0, что логично select (@a - cast(val as float(24))) from #tt1 -- !=0 - точность val не понизилась! drop table #tt1 интересно, в sql2000 это так же выполняется? не могу проверить. ЗЫ. http://support.microsoft.com/default.aspx?scid=kb;RU;q271566 тут описаны различия между sql2000 и sql7 при implicit конверсии типов, но нигде ни слова о таком. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2002, 15:00 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32030063&tid=1822761]: |
0ms |
get settings: |
10ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
133ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
60ms |
get tp. blocked users: |
2ms |
| others: | 251ms |
| total: | 499ms |

| 0 / 0 |
