次の方法で共有


try_to_number 関数

適用対象: check marked yes Databricks SQL Databricks Runtime 11.3 LTS 以降

書式設定 fmt を使用して DECIMAL にキャストされる expr を返します。expr が書式と一致しない場合は、NULL を返します。

構文

try_to_number(expr, fmt)

fmt
  { ' [ MI | S ] [ L | $ ]
      [ 0 | 9 | G | , ] [...]
      [ . | D ]
      [ 0 | 9 ] [...]
      [ L | $ ] [ PR | MI | S ] ' }

引数

  • expr: 数値を表す STRING 式。 expr には、先頭または末尾の空白が含まれる場合があります。
  • fmt: expr の予期される形式を指定する文字列リテラル。

戻り値

DECIMAL(p, s)。ここで、p は合計桁数 (0 または 9) で、s は、小数点以下の桁数です。小数点以下の桁がない場合は、0 になります。

fmt には、次の要素を含めることができます (大文字と小文字は区別されません)。

  • 0 または 9

    09 の間で予期される桁を指定します。 小数点の左側の 0 は、expr に少なくともその桁数が必要であることを示します。 先行する 9 は、expr でこれらの桁は省略可能であることを示しています。

    expr を、小数点の左側で許可されている桁数よりも大きくすることはできません。

    小数点の右側の桁数は、fmt によって指定されている小数点の右側に expr が持つことができる最大桁数を示します。

  • . または D

    小数点の位置を指定します。

    expr には小数点を含める必要はありません。

  • , または G

    , 桁区切り記号 (1000 の位) の位置を指定します。 各桁区切り記号の左右には 0 または 9 がある必要があります。 expr は、数値のサイズに関連する桁区切り記号と一致している必要があります。

  • L または $

    $ 通貨記号の場所を指定します。 この文字は 1 回だけ指定できます。

  • S または MI

    S に対してオプションの "+" または "-" 記号を指定します。MI に対しては "-" のみです。 このディレクティブは、1 回だけ指定できます。

  • PR

    山かっこで囲んで (<1>)、expr が負の数値を示すことを指定します。

expr0 から 9 以外の文字、または 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