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.
Tags und Links sql sql-server-2008