Catégories :

Fonctions de conversion

TO_DECIMAL , TO_NUMBER , TO_NUMERIC

Convertit une expression d’entrée en un nombre à point fixe. Pour une entrée NULL, la sortie est NULL.

Ces fonctions sont synonymes.

Voir aussi :

TRY_TO_DECIMAL, TRY_TO_NUMBER, TRY_TO_NUMERIC

Syntaxe

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

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

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

Arguments

Obligatoire :

expr

Expression de type numérique, caractère ou variante.

Facultatif :

format

Le modèle de format SQL utilisé pour analyser l’entrée expr et la sortie. Pour plus d’informations, voir Modèles de format SQL.

précision

Le nombre maximal de chiffres décimaux dans le nombre résultant ; de 1 à 38. Dans Snowflake, la précision n’est pas utilisée pour déterminer le nombre d’octets nécessaires à l’enregistrement du nombre et n’a pas d’incidence sur l’efficacité. La valeur par défaut est donc le maximum (38).

échelle

Nombre de chiffres décimaux fractionnaires (de 0 à la valeur de précision - 1). 0 indique qu’il n’y a pas de chiffres fractionnaires (c’est-à-dire un nombre entier). L’échelle par défaut est 0.

Renvoie

La fonction renvoie NUMBER(p,s), où p correspond à la précision et s à l”échelle.

Si précision n’est pas spécifié, la valeur par défaut est 38.

Si échelle n’est pas spécifié, la valeur par défaut est 0.

Notes sur l’utilisation

  • Pour NULL, le résultat est NULL.

  • Les nombres à virgule fixe ayant une échelle différente sont convertis en ajoutant des zéros à droite (lors de l’augmentation de l’échelle) ou en réduisant le nombre de chiffres fractionnaires en arrondissant. Notez que les conversions fixes à fixes qui augmentent l’échelle peuvent échouer.

  • Les nombres à virgule flottante seront convertis s’ils se situent dans la plage représentable étant donné l’échelle ; la conversion entre nombres décimaux binaires et décimaux n’est pas précise ; Cela peut entraîner une perte de précision ou des erreurs out-of-range. Les infinités et les non-nombres entraînent une erreur de conversion.

  • Les chaînes sont converties en nombres décimaux entiers ou fractionnaires.

  • Pour une entrée VARIANT :

    • Si la variante contient une valeur numérique à virgule fixe ou à virgule flottante, une conversion numérique appropriée sera effectuée.

    • Si la variante contient une chaîne, une conversion de chaîne sera effectuée.

    • Si la variante contient une valeur booléenne, le résultat sera 0 ou 1 (pour false et true, en conséquence).

    • Si variant contient la valeur JSON null, le résultat sera NULL.

Exemples

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