Ungültiger Gleitkommaoperationsfehler beim Zählen des Logarithmus in SQL Server 2008

8

In Microsoft SQL Server 2008 habe ich eine Tabelle, sagen wir myTable , die ungefähr 600k Zeilen enthält (tatsächlich ist es ein Ergebnis der Verbindung mehrerer anderer Tabellen, aber ich nehme an, das ist nicht wichtig). Eine der Spalten, sagen wir value ist vom Typ numerisch (6,2).

Die einfache Abfrage SELECT value FROM myTable ORDER BY value gibt natürlich ungefähr 600.000 Zahlen zurück, beginnend mit 1.01 (d. h. am niedrigsten) und endend mit 70.00 (am höchsten); nein NULL s oder andere Werte.

Bitte beachten Sie, dass alle diese Werte numerisch und positiv sind. Beim Aufruf von SELECT LOG(value) FROM myTable erhalte ich jedoch die Fehlermeldung "Eine ungültige Gleitkommaoperation ist aufgetreten" .

Dieser Fehler tritt immer nach ungefähr 3 Minuten der ablaufenden Abfrage auf. Wenn Sie die 600k-Werte in Excel kopieren und ihre LN () zählen, gibt es absolut kein Problem.

Ich habe versucht, value in real oder float umzuwandeln, was überhaupt nicht geholfen hat. Endlich habe ich einen Workaround gefunden: SELECT LOG(CASE WHEN value>0 THEN value ELSE 1 END) FROM myTable . Das funktioniert. Aber warum, wenn alle Werte positiv sind? Ich habe versucht, das Ergebnis zu nehmen und die Logarithmen mit denen zu vergleichen, die von Excel gezählt werden - sie sind alle gleich (nur Differenzen der Ordnung 10 ^ (- 15) oder kleiner traten in einigen Reihen auf, was fast sicher durch andere Genauigkeit gegeben ist) . Das bedeutet, dass die Bedingung in der CASE -Anweisung immer wahr ist, nehme ich an.

Hat jemand eine Idee, warum dieser Fehler auftritt? Jede Hilfe wird geschätzt. Danke.

    
Helena 26.05.2011, 09:39
quelle

2 Antworten

5

Sie können den spezifischen Wert identifizieren, der das Problem verursacht;

%Vor%     
Alex K. 26.05.2011 09:58
quelle
3

Sie erhalten diesen Fehler - "Eine ungültige Gleitkommaoperation ist aufgetreten", wenn Sie LOG (0) ausführen. Der Wert von LOG (Null) ist in der Welt der Mathematik unbestimmt, daher der Fehler.

Prost.

    
Kwex 09.07.2012 13:11
quelle

Tags und Links