- 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(p,s)
zurück, wobei p die Genauigkeit precision
und s die Skalierung scale
ist.
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.
Festkommazahlen mit unterschiedlicher Skalierung werden entweder durch Hinzufügen von Nullen (bei Erhöhung der Skalierung) oder durch Verringern der Anzahl der Nachkommastellen (per Rundung) konvertiert. Beachten Sie, dass die Umwandlung von Festkommazahlen in Festkommazahlen, bei denen die Skalierung erhöht wird, fehlschlagen kann.
Gleitkommazahlen werden konvertiert, wenn sie hinsichtlich der Skalierung innerhalb des darstellbaren Bereichs liegen. Die Umrechnung zwischen binären und dezimalen Bruchzahlen ist ungenau. Die Folge können Genauigkeitsverluste oder Out-of-Range-Fehler (Wert liegt außerhalb des zulässigen Bereichs) sein. Unendliche Zahlen und Nichtzahlen führen zu einem Konvertierungsfehler.
Zeichenfolgen werden als dezimale Ganz- oder Bruchzahlen konvertiert.
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 |
+---------+-----+-----------+-----------+