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


Функция try_to_number

Область применения: флажок Databricks SQL флажок Databricks Runtime 11.3 LTS и выше

Возвращает приведение expr к DECIMAL с помощью форматирования fmt или NULL, если expr не соответствует формату.

Синтаксис

try_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.

Если требуется строгий синтаксис, используйте 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 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