Función try_to_number
Se aplica a: Databricks SQL Databricks Runtime 11.3 LTS y versiones posteriores
Devuelve la conversión expr
a DECIMAL mediante el formato fmt
, o NULL
si expr
no coincide con el formato.
Sintaxis
try_to_number(expr, fmt)
fmt
{ ' [ MI | S ] [ L | $ ]
[ 0 | 9 | G | , ] [...]
[ . | D ]
[ 0 | 9 ] [...]
[ L | $ ] [ PR | MI | S ] ' }
Argumentos
expr
: Expresión STRING que representa un número.expr
puede incluir espacios iniciales o finales.fmt
: Literal de STRING que especifica el formato esperado deexpr
.
Devoluciones
Un DECIMAL(p, s) wherep
es el número total de dígitos (0
o 9
) y s
es el número de dígitos después del separador decimal, o 0 si no hay ningún dígito después del separador decimal.
fmt
puede contener los siguientes elementos (sin distinción entre mayúsculas y minúsculas):
0
o9
Especifica un dígito esperado entre
0
y9
. Un0
a la izquierda de los puntos decimales indica queexpr
debe tener al menos tantos dígitos. El9
inicial indica queexpr
puede omitir estos dígitos.expr
no debe ser mayor que lo permitido por el número de dígitos a la izquierda del separador decimal.Los dígitos situados a la derecha del decimal indican el número máximo de dígitos que puede tener
expr
a la derecha del separador decimal especificado porfmt
..
oD
Especifica la posición del separador decimal.
expr
no es necesario incluir un separador decimal.,
oG
Especifica la posición del separador de agrupación (miles)
,
. Tiene que haber un0
o9
a la izquierda y a la derecha de cada separador de agrupación.expr
tiene que coincidir con el separador de agrupación pertinente para el tamaño del número.L
o$
Especifica la ubicación del signo de moneda
$
. Este carácter solo se puede especificar una vez.S
oMI
Especifica la posición de un signo opcional "+" o "-" para
S
, y "-" solo paraMI
. Esta directiva solo se puede especificar una vez.PR
Especifica que
expr
indica un número negativo con corchetes angulares de ajuste (<1>
).
Si expr
contiene caracteres que no sean de 0
a 9
, o los permitidos en fmt
, se devuelve un NULL
.
Para una semántica estricta, use to_number().
Ejemplos
-- 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