- Kategorien:
TO_DECIMAL , TO_NUMBER , TO_NUMERIC¶
Konvertiert einen Eingabeausdruck in eine Festkommazahl. Bei Eingabe von NULL lautet die Ausgabe NULL.
Diese Funktionen sind gleichbedeutend.
Syntax¶
TO_DECIMAL( <expr> [, '<format>' ] [, <precision> [, <scale> ] ] )
TO_NUMBER( <expr> [, '<format>' ] [, <precision> [, <scale> ] ] )
TO_NUMERIC( <expr> [, '<format>' ] [, <precision> [, <scale> ] ] )
Argumente¶
Benötigt:
expr
Ein Ausdruck eines numerischen, Zeichen- oder Variantentyps.
Optional:
format
Das SQL-Formatmodell, mit dem die Eingabe
expr
analysiert und zurückgegeben wird. Weitere Informationen dazu finden Sie unter SQL-Formatmodelle.precision
Die maximale Anzahl von Dezimalstellen in der resultierenden Zahl; von 1 bis 38. In Snowflake dient die Genauigkeit nicht zur Bestimmung der Zahl der zum Speichern erforderlichen Bytes und hat keinen Einfluss auf die Effizienz. Der Standardwert ist also das Maximum (38).
scale
Die Anzahl der Nachkommastellen (von 0 bis
precision
- 1). 0 steht für Zahlen ohne Nachkommastellen (d. h. ganze Zahlen). Der Standardwert für die Skalierung ist 0.
Rückgabewerte¶
Die Funktion gibt NUMBER(precision, scale)
zurück.
Wenn
precision
nicht angegeben ist, wird standardmäßig 38 verwendet.Wenn
scale
nicht angegeben ist, wird standardmäßig 0 verwendet.
Nutzungshinweise¶
Bei Eingabe von NULL ist das Ergebnis NULL.
Für Festkommazahlen:
Zahlen mit unterschiedlichen Maßstäben werden umgerechnet, indem entweder Nullen nach rechts hinzugefügt werden (wenn der Maßstab erhöht werden muss) oder die Anzahl der Nachkommastellen durch Runden verringert wird (wenn der Maßstab verringert werden muss).
Beachten Sie, dass die Umwandlung von Festkommazahlen in Festkommazahlen, die die Skalierung erhöhen, fehlschlagen kann.
Für Gleitkommazahlen:
Zahlen werden umgewandelt, wenn sie innerhalb des darstellbaren Bereichs liegen, der durch die Skala vorgegeben ist.
Die Umrechnung zwischen binären und dezimalen Bruchzahlen ist nicht präzise. Dies kann zu Präzisionsverlusten oder Fehlern außerhalb des Bereichs führen.
Werte von unendlichen Zahlen und NaN (Nichtzahlen) führen zu Konvertierungsfehler.
Zeichenfolgen werden als Dezimal-, Ganz-, Bruch- oder Gleitkommazahlen konvertiert.
Bei der Eingabe von Nachkommastellen ergibt sich die Genauigkeit aus der Anzahl der Nachkommastellen.
Bei der Eingabe von Gleitkommazahlen ist das Weglassen der Mantisse oder des Exponenten zulässig und wird als 0 interpretiert. Somit wird
E
als 0 geparst.
Bei VARIANT-Eingaben:
Wenn der VARIANT-Wert eine numerische Festkomma- oder Gleitkommazahl ist, wird eine entsprechende numerische Konvertierung durchgeführt.
Wenn der VARIANT-Wert eine Zeichenfolge ist, wird eine Zeichenfolgenkonvertierung durchgeführt.
Wenn der VARIANT-Wert ein boolescher Wert ist, ist das Ergebnis 0 oder 1 (für „false“ bzw. „true“).
Wenn der VARIANT-Wert ein JSON
null
-Wert ist, ist die Ausgabe NULL.
Beispiele¶
Erstellen Sie eine Tabelle mit einer VARCHAR-Spalte, rufen Sie dann die Zeichenfolgenwerte aus der Tabelle ab, und übergeben Sie diese Werte an die TO_NUMBER-Funktion mit unterschiedlichen Werten für precision
und scale
.
CREATE OR REPLACE TABLE number_conv(expr VARCHAR);
INSERT INTO number_conv VALUES ('12.3456'), ('98.76546');
SELECT expr, TO_NUMBER(expr), TO_NUMBER(expr, 10, 1), TO_NUMBER(expr, 10, 8) FROM number_conv;
Die Abfrage gibt die folgende Ausgabe zurück:
+----------+-----------------+------------------------+------------------------+
| EXPR | TO_NUMBER(EXPR) | TO_NUMBER(EXPR, 10, 1) | TO_NUMBER(EXPR, 10, 8) |
|----------+-----------------+------------------------+------------------------|
| 12.3456 | 12 | 12.3 | 12.34560000 |
| 98.76546 | 99 | 98.8 | 98.76546000 |
+----------+-----------------+------------------------+------------------------+
Erstellen Sie eine Abfrage auf derselben Tabelle mit der Funktion TO_NUMBER, um eine Zahl mit einem precision
-Wert von 10
und einer Dezimalstellenzahl von 9
zurückzugeben.
SELECT expr, TO_NUMBER(expr, 10, 9) FROM number_conv;
Wenn das Argument precision
auf 10
gesetzt ist, beträgt die maximale Anzahl der Dezimalstellen in den Ergebnissen 10. Da beide Werte in der Tabelle zwei Ziffern vor dem Dezimalpunkt haben und scale
auf 9
gesetzt ist, gibt die Abfrage einen Fehler zurück, da die Ergebnisse 11 Ziffern zurückgeben würden.
100039 (22003): Numeric value '12.3456' is out of range
Verwenden Sie verschiedene Formatelemente mit der Funktion TO_DECIMAL in einer Abfrage:
SELECT column1,
TO_DECIMAL(column1, '99.9') as D0,
TO_DECIMAL(column1, '99.9', 9, 5) as D5,
TO_DECIMAL(column1, 'TM9', 9, 5) as TD5
FROM VALUES ('1.0'), ('-12.3'), ('0.0'), ('- 0.1');
Die Abfrage gibt die folgende Ausgabe zurück:
+---------+-----+-----------+-----------+
| COLUMN1 | D0 | D5 | TD5 |
|---------+-----+-----------+-----------|
| 1.0 | 1 | 1.00000 | 1.00000 |
| -12.3 | -12 | -12.30000 | -12.30000 |
| 0.0 | 0 | 0.00000 | 0.00000 |
| - 0.1 | 0 | -0.10000 | -0.10000 |
+---------+-----+-----------+-----------+
Die Ausgabe zeigt, dass das Text-minimale Formatelement TM9
genau die Anzahl der Ziffern des Nachkommastellenbereichs auf der Grundlage der angegebenen Dezimalstellenzahl ausgibt. Weitere Informationen dazu finden Sie unter Textminimale numerische Formate.
Verwenden Sie das Formatelement X mit der Funktion TO_DECIMAL, um einen hexadezimalen Wert in einen dezimalen Wert zu konvertieren:
SELECT TO_DECIMAL('ae5', 'XXX');
Die Abfrage gibt die folgende Ausgabe zurück:
+--------------------------+
| TO_DECIMAL('AE5', 'XXX') |
|--------------------------|
| 2789 |
+--------------------------+
Die Anzahl der Ziffern im Formatelement muss gleich sein oder größer als die Anzahl der Ziffern im Ausdruck. Führen Sie zum Beispiel die folgende Abfrage aus:
SELECT TO_DECIMAL('ae5', 'XX');
Die Abfrage gibt einen Fehler zurück:
100140 (22007): Can't parse 'ae5' as number with format 'XX'