In Microsoft SQL Server 2008, I have a table, say myTable
, containing about 600k rows (actually, it is a result of joining several other tables, but i suppose this is not important). One of its columns, say value
is of type numeric(6,2).
The simple query SELECT value FROM myTable ORDER BY value
returns of course about 600k numbers, starting with 1.01 (i.e. the lowest) and ending with 70.00 (highest); no NULL
s or other values.
Please notice, that all these values are numeric and positive. However, when calling SELECT LOG(value) FROM myTable
, i obtain an error message "An invalid floating point operation occurred".
This error always appears after about 3 minutes of the query running. When copying the 600k values to Excel and counting their LN(), there is absolutely no problem.
I have tried converting value
to real or float, which did not help at all. Finally I found a workaround: SELECT LOG(CASE WHEN value>0 THEN value ELSE 1 END) FROM myTable
. This works. But why, when all the values are positive? I have tried to take the result and compare the logarithms with those counted by Excel - they are all the same (only differences of the order 10^(-15) or smaller occured in some rows, which is almost surely given by different accuracy). That means that the condition in the CASE
statement is always true, I suppose.
Does anyone have any idea why this error occurs? Any help appreciated. Thanks.