Funkce 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
.
Syntaxe
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 neexistuje.
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í nejvíce číslic vpravo od desetinné čárky
expr
, nežfmt
určuje..
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
Povoleno pouze na konci formátovací řetězec; určuje záporné
expr
číslo s zalomenými hranatými závorkami (<1>
).
Pokud expr
obsahuje jiné znaky, než 0
9
jsou znaky , nebo znaky povolené v fmt
, vrátí se chyba.
Pokud se chcete vrátit NULL
místo chyby pro neplatné expr
použití try_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 to_number('-$12,345.67', 'S$999,099.99');
-12345.67
-- Plus is optional, and so are fractional digits.
> SELECT 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 to_number('$045', 'S$999,099.99');
45.00
-- Using brackets to denote negative values
> SELECT to_number('<1234>', '999999PR');
-1234