Функция to_number
Область применения: Databricks SQL Databricks Runtime 11.3 LTS и выше
Возвращает приведение expr
к DECIMAL с помощью форматирования fmt
.
Синтаксис
to_number(expr, fmt)
fmt
{ ' [ MI | S ] [ L | $ ]
[ 0 | 9 | G | , ] [...]
[ . | D ]
[ 0 | 9 ] [...]
[ L | $ ] [ PR | MI | S ] ' }
Аргументы
expr
— строковое (STRING) выражение, представляющее число.expr
может включать начальные или конечные пробелы.fmt
— строковый (STRING) литерал, указывающий ожидаемый форматexpr
.
Возвраты
Значение DECIMAL(p, s), где p
— это общее число цифр (0
или 9
), а s
— число цифр после десятичной точки или 0, если они отсутствуют.
fmt
может включать следующие элементы (регистр не имеет значения):
0
или9
Указывает ожидаемую цифру между
0
и9
.0
слева от десятичных точек указывает, чтоexpr
имеет по меньшей мере столько же цифр.9
в начале указывает, чтоexpr
может опустить такие цифры.expr
не может быть больше, чем это разрешает число цифр слева от десятичной точки.Цифры справа от десятичной точки указывают максимальное число цифр, которое может иметь
expr
справа от десятичной точки по сравнению с указаннымfmt
числом..
илиD
Указывает позицию десятичной точки.
expr
может не включать десятичную точку.,
илиG
Указывает позицию разделителя группирований (тысяч),
,
(запятая). Справа и слева от каждого разделителя группирований должна находиться цифра0
или9
.expr
должно соответствовать разделителю группирований, связанным с размером числа.L
или$
Указывает расположение знака валюты
$
. Этот символ может быть указан только один раз.S
илиMI
Указывает позицию необязательного знака "+" или "-" для
S
и только "-" дляMI
. Эта директива может быть указана только один раз.PR
Разрешено только в конце строки формата. Указывает, что
expr
означает отрицательное число с заключающими угловыми скобками (<1>
).
Если expr
содержит какие-либо символы, кроме 0
–9
, или символы, разрешенные в fmt
, возвращается ошибка.
Чтобы вернуть значение NULL
вместо ошибки, для недопустимого expr
используйте try_to_number().
Примеры
-- 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