- Catégories :
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 :
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.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
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 |
+---------+-----+-----------+-----------+