Kategorien:

Konvertierungsfunktionen

TO_DECIMAL , TO_NUMBER , TO_NUMERIC

Konvertiert einen Eingabeausdruck in eine Festkommazahl. Bei Eingabe von NULL lautet die Ausgabe NULL.

Diese Funktionen sind gleichbedeutend.

Siehe auch:

TRY_TO_DECIMAL, TRY_TO_NUMBER, TRY_TO_NUMERIC

Syntax

TO_DECIMAL( <expr> [, '<format>' ] [, <precision> [, <scale> ] ] )

TO_NUMBER( <expr> [, '<format>' ] [, <precision> [, <scale> ] ] )

TO_NUMERIC( <expr> [, '<format>' ] [, <precision> [, <scale> ] ] )
Copy

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
Copy
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 |
+---------+-----+-----------+-----------+
Copy