Funkcja to_number
Dotyczy: Databricks SQL Databricks Runtime 11.3 LTS i nowsze
Zwraca expr
rzutowanie do dziesiętnego przy użyciu formatowania fmt
.
Składnia
to_number(expr, fmt)
fmt
{ ' [ MI | S ] [ L | $ ]
[ 0 | 9 | G | , ] [...]
[ . | D ]
[ 0 | 9 ] [...]
[ L | $ ] [ PR | MI | S ] ' }
Argumenty
expr
: wyrażenie STRING reprezentujące liczbę.expr
może zawierać spacje wiodące lub końcowe.fmt
: literał CIĄGU określający oczekiwanyexpr
format .
Zwraca
Liczba dziesiętna(p), gdzie p
jest łączną liczbą cyfr (0
lub 9
) i s
jest liczbą cyfr po przecinku dziesiętnym lub 0, jeśli nie ma.
fmt
może zawierać następujące elementy (bez uwzględniania wielkości liter):
0
lub9
Określa oczekiwaną cyfrę między
0
i9
. Od0
lewej strony punktów dziesiętnych wskazuje, żeexpr
musi mieć co najmniej tyle cyfr. Wiodący9
wskazuje, żeexpr
może pominąć te cyfry.expr
nie może być większy niż liczba cyfr z lewej strony punktu dziesiętnego.Cyfry z prawej strony liczby dziesiętnej wskazują, że większość cyfr
expr
może mieć prawo od punktu dziesiętnego niżfmt
określa..
lubD
Określa położenie punktu dziesiętnego.
expr
nie musi zawierać punktu dziesiętnego.,
lubG
Określa położenie separatora
,
grupowania (tysięcy). Musi istnieć znak0
lub9
po lewej i prawej stronie każdego separatora grupowania.expr
musi być zgodny z separatorem grupowania odpowiadającym rozmiarowi liczby.L
lub$
Określa lokalizację
$
znaku waluty. Ten znak można określić tylko raz.S
lubMI
Określa położenie opcjonalnego znaku "+" lub "-" tylko dla
S
, i "-" tylko dla .MI
Tę dyrektywę można określić tylko raz.PR
Dozwolone tylko na końcu ciągu formatu; określa, że
expr
wskazuje liczbę ujemną z zawijanymi nawiasami kątowymi (<1>
).
Jeśli expr
zawiera jakiekolwiek znaki inne niż 0
za pomocą 9
znaków lub dozwolonych w pliku fmt
, zwracany jest błąd.
Aby zwrócić NULL
zamiast błędu nieprawidłowego expr
użycia try_to_number().
Przykłady
-- 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_FORMAT.MISMATCH_INPUT
-- 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