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

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.

precision

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

scale

Nombre de chiffres décimaux fractionnaires (de 0 à la valeur de precision - 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 precision et s à l”scale.

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

Si scale 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 sont 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 hors limites. 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 est effectuée.

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

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

    • Si la variante contient la valeur JSON null, la sortie est 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
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