Funkce try_to_number
Platí pro: Databricks SQL Databricks Runtime 11.3 LTS a vyšší
Vrátí expr
přetypování na decimal pomocí formátování fmt
, nebo NULL
pokud expr
neodpovídá formátu.
Syntaxe
try_to_number(expr, fmt)
fmt
{ ' [ MI | S ] [ L | $ ]
[ 0 | 9 | G | , ] [...]
[ . | D ]
[ 0 | 9 ] [...]
[ L | $ ] [ PR | MI | S ] ' }
Argumenty
expr
: Výraz STRING představující číslo.expr
může obsahovat úvodní nebo koncové mezery.fmt
: Literál STRING určující očekávaný formátexpr
.
Návraty
A DECIMAL(p; s), kde p
je celkový počet číslic (0
nebo 9
) a s
je počet číslic za desetinnou čárkou nebo 0, pokud za desetinnou čárkou nejsou žádné číslice.
fmt
může obsahovat následující prvky (nerozlišují malá a velká písmena):
0
nebo9
Určuje očekávanou číslici mezi
0
a9
. Vlevo0
od desetinných míst je uvedeno, žeexpr
musí mít alespoň tolik číslic. Na úvodním9
znaméně jeexpr
možné tyto číslice vynechat.expr
nesmí být větší, aby počet číslic vlevo od desetinné čárky umožňoval.Číslice napravo od desetinné čárky označují maximální počet číslic, které mohou mít vpravo od desetinné čárky
expr
určenéfmt
hodnotou ..
neboD
Určuje pozici desetinné čárky.
expr
nemusí obsahovat desetinnou čárku.,
neboG
Určuje pozici
,
oddělovače seskupení (tisíce). U každého oddělovače seskupení musí být0
vlevo nebo9
vpravo.expr
musí odpovídat oddělovači seskupení, který je relevantní pro velikost čísla.L
nebo$
Určuje umístění znaménka
$
měny. Tento znak lze zadat pouze jednou.S
neboMI
Určuje pozici volitelného znaku +nebo -, pouze
S
proMI
. Tuto direktivu lze zadat pouze jednou.PR
Určuje záporné
expr
číslo se zalomenými závorkami (<1>
).
Pokud expr
obsahuje jiné znaky, než jsou 9
0
znaky, nebo ty, které jsou povoleny v fmt
, NULL
je vrácena.
Pro striktní sémantické použití to_number().
Příklady
-- 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