Поделиться через


Функция 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 содержит какие-либо символы, кроме 09, или символы, разрешенные в 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