Kategorien:

Konvertierungsfunktionen

TO_DOUBLE

Konvertiert einen Ausdruck in eine Gleitkommazahl mit doppelter Genauigkeit.

Bei Eingabe von NULL ist das Ergebnis NULL.

Siehe auch:

TRY_TO_DOUBLE

Syntax

TO_DOUBLE( <expr> [, '<format>' ] )
Copy

Argumente

expr

Ein Ausdruck eines numerischen, Zeichen- oder Variantentyps.

format

Wenn der Ausdruck als Zeichenfolge ausgewertet wird, akzeptiert die Funktion ein optionales Formatmodell. Beschreibungen zu Formatmodellen finden Sie unter SQL-Formatmodelle. Das Formatmodell gibt das Format der Eingabezeichenfolge an, nicht das Format des Ausgabewerts.

Rückgabewerte

Diese Funktion gibt einen Wert vom Datentyp FLOAT zurück.

Wenn expr den Wert NULL hat, gibt die Funktion NULL zurück.

Nutzungshinweise

  • Festkommazahlen werden in Gleitkommazahlen umgewandelt. Die Konvertierung kann zwar nicht fehlschlagen, jedoch zu Genauigkeitsverlusten führen.

  • Zeichenfolgen werden als dezimale Ganzzahlen oder Bruchzahlen konvertiert. Wissenschaftliche Notation und Sonderwerte (nan, inf, infinity) werden akzeptiert.

  • Bei VARIANT-Eingaben:

    • Wenn die Variante einen Festkommawert enthält, wird die numerische Konvertierung durchgeführt.

    • Wenn die Variante einen Gleitkommawert enthält, bleibt der Wert unverändert.

    • Wenn die Variante eine Zeichenfolge enthält, wird eine Zeichenfolgenkonvertierung vorgenommen.

    • Wenn die Variante einen booleschen Wert enthält, ist das Ergebnis 0 oder 1 (für „false“ bzw. „true“).

    • Wenn der VARIANT-Wert ein JSON-null-Wert ist, ist die Ausgabe NULL.

  • Die Konvertierung von Dezimalbrüchen in Binärwerte und zurück ungenau ist (d. h. die Ausgabe einer Gleitkommazahl, die aus einer Dezimaldarstellung konvertiert wurde, kann eine leicht andere Zahl ergeben). Wenn eine genaue Darstellung von Dezimalbrüchen erforderlich ist, sollten Sie Festkommazahlen verwenden.

Beispiele

Nach dem Erstellen einer Tabelle mit Spalten unterschiedlicher Datentypen ruft dieses Skript für jede der Spalten TO_DOUBLE auf:

CREATE OR REPLACE TABLE double_demo (d DECIMAL(7, 2), v VARCHAR, o VARIANT);
INSERT INTO double_demo (d, v, o) SELECT 1.1, '2.2', TO_VARIANT(3.14);
SELECT TO_DOUBLE(d), TO_DOUBLE(v), TO_DOUBLE(o) FROM double_demo;
Copy
+--------------+--------------+--------------+
| TO_DOUBLE(D) | TO_DOUBLE(V) | TO_DOUBLE(O) |
|--------------+--------------+--------------|
|          1.1 |          2.2 |         3.14 |
+--------------+--------------+--------------+

Das folgende Beispiel zeigt, dass die Umwandlung von einem binären Gleitkommawert zurück in eine Zahl nicht präzise ist:

SELECT TO_DOUBLE(1.1)::NUMBER(38, 18);
Copy
+--------------------------------+
| TO_DOUBLE(1.1)::NUMBER(38, 18) |
|--------------------------------|
|           1.100000000000000089 |
+--------------------------------+