- 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¶
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;
+----------+-----------------+------------------------+------------------------+
| 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 |
+----------+-----------------+------------------------+------------------------+
select expr, to_number(expr, 10, 9) from number_conv;
100039 (22003): Numeric value '12.3456' is out of range
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 ');
+---------+-----+-----------+-----------+
| 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 |
+---------+-----+-----------+-----------+