В Microsoft SQL Server 2008 у меня есть таблица, скажем myTable
, содержащая около 600 тыс. Строк (на самом деле, это результат объединения нескольких других таблиц, но я полагаю, что это не важно).Один из столбцов, скажем, value
, имеет тип numeric (6,2).
Простой запрос SELECT value FROM myTable ORDER BY value
возвращает, конечно, около 600 тыс. Номеров, начиная с 1,01 (то есть наименьшего) и заканчивая 70,00(наибольший);нет NULL
с или другие значения.
Обратите внимание, что все эти значения являются числовыми и положительными.Однако при вызове SELECT LOG(value) FROM myTable
я получаю сообщение об ошибке «Произошла недопустимая операция с плавающей запятой» .
Эта ошибка всегда появляется примерно через 3 минуты после выполнения запроса.При копировании 600k-значений в Excel и подсчете их LN () проблем абсолютно не возникает.
Я пытался преобразовать value
в действительные или с плавающей точкой, что не помогло вообще.Наконец я нашел обходной путь: SELECT LOG(CASE WHEN value>0 THEN value ELSE 1 END) FROM myTable
.Это работает.Но почему, когда все значения положительные?Я попытался взять результат и сравнить логарифмы с подсчитанными в Excel - они все одинаковые (в некоторых строках встречаются только различия порядка 10 ^ (- 15) или меньше, что почти наверняка дает разную точность),Это означает, что условие в выражении CASE
всегда верно, я полагаю.
У кого-нибудь есть идеи, почему возникает эта ошибка?Любая помощь приветствуется.Спасибо.