Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

ungültige float werte

7 views
Skip to first unread message

Karsten Paulisch

unread,
Mar 13, 2005, 7:35:02 PM3/13/05
to
Hi,

ich habe innerhalb einer Tabelle (MSSQL Server 2000) eine float Spalte die
unter Umständen auch ungültige Werte (1,#QNAN) enthalten kann, z.B. das
Ergebnis von 0.0/0.0.
Sobald innerhalb dieser Spalte einmal ein solcher Wert vorkommt, erhalte ich
beim Suchen des Minimums für diese Spalte folgende Fehlermeldung:

A floating point exception occurred in the user process. Current transaction
is canceled.

Selbst wenn die Zeile neben diesem ungültigen auch gültige Werte enthält,
bekommt man kein Minimum geliefert. Auch bei einem SELECT * FROM werden die
Zeilen, in der diese Spalte 1,#QNAN enthält, ignoriert.
Hat jemand eine Idee dieses Problem zu beheben?

mfg


Elmar Boye

unread,
Mar 14, 2005, 6:09:49 AM3/14/05
to
Hallo Karsten,

Karsten Paulisch <Pauli...@t-online.de> schrieb ...

Der SQL Server unterstützt weder NaN noch Infinite bei seinen
intrinsischen Funktionen.
Da die aber von den zugrundeliegenden Floating-Point Prozessoren
und/oder Runtime-Library in System kommen, wirds problematisch,
da dies nicht abgeprüft wird - und ein Client das durchaus
darzustellen vermag. (Bei den SQL Server Tools tuts zwar der
Enterprise Manager, der Query Analyzer unterschlägt sie aber).

Wenn Du mit SQL Server Funktionen arbeitet willst, solltest Du
das wenn möglich bereits clientseitig unterbinden.
Und z. B. im Falle von NaN durch einen NULL Wert ersetzen.
In T-SQL selbst wirds etwas unschön, da es keine Konstanten für
diese Ausnahmewerte gibt:

SELECT MIN(CASE
-- NaN: -1.#IND
WHEN CONVERT(binary(8), number) = 0xFFF8000000000000
THEN NULL
-- +Infinity: 1.#INF
WHEN CONVERT(binary(8), number) = 0x7FF0000000000000
THEN NULL
-- -Infinity: -1.#INF
WHEN CONVERT(binary(8), number) = 0xFFF0000000000000
THEN NULL
ELSE number END)
FROM Tabelle

Gruss
Elmar

0 new messages