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> ] ] )

Argumente

Benötigt:

Ausdruck

Ein Ausdruck eines numerischen, Zeichen- oder Variantentyps.

Optional:

Format

Das SQL-Formatmodell, mit dem die Eingabe Ausdruck analysiert und zurückgegeben wird. Weitere Informationen dazu finden Sie unter SQL-Formatmodelle.

Genauigkeit

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).

Skalierung

Die Anzahl der Nachkommastellen (von 0 bis Genauigkeit - 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 und s die Skalierung ist.

Wenn Genauigkeit nicht angegeben ist, wird standardmäßig 38 verwendet.

Wenn Skalierung 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 Umwandlungen von Festkommazahlen in Festkommazahlen, bei denen die Skalierung erhöht wird, fehlschlagen können.

  • 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 sein. Unendliche Zahlen und Nichtzahlen führen zu einem Konvertierungsfehler.

  • Zeichenfolgen werden als dezimale Ganz- oder Bruchzahlen konvertiert.

  • Bei VARIANT-Eingaben:

    • Wenn die Variante einen numerischen Festkomma- oder Gleitkommawert enthält, wird eine entsprechende numerische Konvertierung durchgeführt.

    • Wenn die Variante eine Zeichenfolge enthält, wird eine Zeichenfolgenkonvertierung durchgeführt.

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

    • Wenn die Variante einen JSON null-Wert enthält, lautet 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 |
+---------+-----+-----------+-----------+