TO_NUMBER |
A nombre |
---|---|
Oracle Database SQL |
Syntaxe
to_number(expression[,format_mask[,nls_language]]) |
Paramètres
Nom | Description |
---|---|
expression | Ce paramètre permet d'indiquer la chaîne de caractères contenant le nombre à convertir |
format_mask | Ce paramètre permet d'indiquer le masque de format a utilisé. |
nls_language | Ce paramètre permet d'indiquer le langage à utilisé |
Description
Cette fonction permet de convertir une expression quelconque en nombre.
Remarques
- Conversion explicite de chaînes de caractères en nombres : La fonction TO_NUMBER(expression[, format_mask]) est utilisée pour convertir une chaîne de caractères contenant des chiffres en une valeur numérique. Cette conversion est essentielle lorsque les données sont stockées sous forme de texte mais doivent être utilisées dans des calculs, des agrégations ou des comparaisons numériques.
- Importance du masque de format (format_mask) : Le paramètre optionnel format_mask permet de spécifier la structure du nombre attendu dans la chaîne de caractères, avec des symboles comme '9999.99' ou '9,999.99'. Si la chaîne de caractères ne correspond pas au masque, une erreur de conversion est levée. Cela permet un contrôle très précis sur le format des nombres acceptés.
- Gestion de la langue avec NLS_LANGUAGE : Le paramètre nls_language permet de définir la culture linguistique utilisée pour interpréter la chaîne de caractères, notamment pour les séparateurs décimaux ou les symboles monétaires. Par exemple, certains pays utilisent la virgule comme séparateur décimal (1,23 au lieu de 1.23). Cette option évite les erreurs dans les systèmes multilingues.
- Différence entre TO_NUMBER et CAST : Bien que CAST(expression AS NUMBER) puisse aussi être utilisé, TO_NUMBER offre un contrôle plus fin avec le masque de format. Cela le rend plus adapté aux chaînes contenant des séparateurs, des signes monétaires ou d'autres symboles particuliers à convertir proprement en valeurs numériques.
- Utilisation fréquente dans l'import de données : TO_NUMBER est souvent utilisé dans les processus d'ETL (Extraction, Transformation, Chargement) où les données sources sont textuelles. Il permet de s'assurer que les valeurs insérées ou comparées sont correctement converties avant d'être utilisées dans des calculs ou des jointures avec des colonnes numériques.
- Peut générer des erreurs si la chaîne de caractères est mal formatée : Si la chaîne passée en paramètre contient des caractères non numériques, des espaces non autorisés ou un mauvais format par rapport au masque, Oracle renverra une erreur :
- Intégration dans des clauses WHERE et ORDER BY : TO_NUMBER peut être utilisé dans des clauses WHERE pour filtrer des chaînes numériques ou dans des ORDER BY pour trier des données alphanumériques selon leur valeur réelle. Cela permet de traiter correctement des données mal typées ou des résultats de requêtes textuelles issues d'anciennes structures.
- Précaution avec les champs NULL ou vides : Si l'expression passée à TO_NUMBER est NULL, le résultat sera également NULL. En revanche, une chaîne de caractères vide ('') sera considérée comme invalide et provoquera une erreur. Il est donc prudent d'utiliser NULLIF, CASE ou REGEXP_LIKE pour éviter des erreurs lors des conversions sur des données incertaines.
ORA-01722: invalid number |
Il est donc conseillé de valider ou nettoyer les données en amont.
Exemples
Voici un exemple montrant comment convertir un simple nombre contenu dans une chaîne de caractères :
on obtiendra le résultat suivant :
TO_NUMBER('12345') |
12345 |
Voici un exemple montrant comment convertir un simple nombre décimal avec un format «9999.99» :
on obtiendra le résultat suivant :
TO_NUMBER('1234.56','9999.99') |
1234.5 |
Voici un exemple montrant comment réagit une conversion avec un format à décimal «9999.999» sur un nombre réel sans décimal :
on obtiendra le résultat suivant :
TO_NUMBER('123.0','9999.999') |
123 |
Voir également
Article - Les géants de l'informatique - Oracle
Dernière mise à jour : Lundi, le 11 mai 2015