Fonction try_to_number
S’applique à : Databricks SQL Databricks Runtime 11.3 LTS et versions ultérieures
Retourne expr
casté en DECIMAL à l’aide de la mise en forme fmt
, ou NULL
si expr
ne correspond pas au format.
Syntaxe
try_to_number(expr, fmt)
fmt
{ ' [ MI | S ] [ L | $ ]
[ 0 | 9 | G | , ] [...]
[ . | D ]
[ 0 | 9 ] [...]
[ L | $ ] [ PR | MI | S ] ' }
Arguments
expr
: expression de type chaîne (STRING) représentant un nombre.expr
peut inclure des espaces de début ou de fin.fmt
: littéral STRING, spécifiant le format attendu deexpr
.
Retours
Une valeur DECIMAL(p, s) wherep
correspond au nombre total de chiffres (0
ou 9
) et s
est le nombre de chiffres après la virgule décimale, ou 0 s’il n’y a pas de chiffres après la virgule décimale.
fmt
peut contenir les éléments suivants (ne respectant pas la casse) :
0
ou9
Spécifie un chiffre attendu entre
0
et9
. Un0
à gauche des décimales indique queexpr
doit avoir au moins autant de chiffres. Un9
initial indique queexpr
peut omettre ces chiffres.expr
ne doit pas être supérieur au nombre de chiffres à gauche de la virgule décimale autorisés.Les chiffres à droite de la décimale indiquent le nombre maximal de chiffres que
expr
peut avoir à droite de la virgule décimale spécifié parfmt
..
ouD
Spécifie la position de la virgule décimale.
expr
n’a pas besoin d’inclure une virgule décimale.,
ouG
Spécifie la position du séparateur de regroupement (milliers)
,
. Il doit y avoir un0
ou9
à gauche et à droite de chaque séparateur de regroupement.expr
doit correspondre au séparateur de regroupement correspondant à la taille du nombre.L
ou$
Spécifie l’emplacement du signe monétaire
$
. Ce caractère ne peut être spécifié qu’une seule fois.S
ouMI
Spécifie la position d’un signe facultatif « + » ou « - » pour
S
, et « - » uniquement pourMI
. Cette directive ne peut être spécifiée qu’une seule fois.PR
Spécifie que
expr
indique un nombre négatif avec des crochets englobants (<1>
).
Si expr
contient des caractères autres que 0
à 9
, ou ceux autorisés dans fmt
, NULL
est retourné.
Pour une sémantique stricte, utilisez to_number().
Exemples
-- The format expects:
-- * an optional sign at the beginning,
-- * followed by a dollar sign,
-- * followed by a number between 3 and 6 digits long,
-- * thousands separators,
-- * up to two dight beyond the decimal point.
> SELECT try_to_number('-$12,345.67', 'S$999,099.99');
-12345.67
-- Plus is optional, and so are fractional digits.
> SELECT try_to_number('$345', 'S$999,099.99');
345.00
-- The format requires at least three digits.
> SELECT to_number('$45', 'S$999,099.99');
Error: Invalid number
-- The format requires at least three digits.
> SELECT try_to_number('$45', 'S$999,099.99');
NULL
-- The format requires at least three digits
> SELECT try_to_number('$045', 'S$999,099.99');
45.00
-- Using brackets to denote negative values
> SELECT try_to_number('<1234>', '999999PR');
-1234