数字模式用于格式化和解析

描述

函数例如 to_number to_char 支持在字符串和十进制类型之间进行转换。这些函数接受格式字符串,指示如何在这些类型之间映射。

语法

数字格式字符串支持以下语法:

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

元素

每个数字格式字符串可以包含以下元素(不区分大小写):

函数类型和错误处理

示例

以下示例使用了 to_number , try_to_number to_char SQL 函数。

请注意,大多数示例中使用的格式字符串期望:

转换为数字的 to_number 函数

-- 带货币符号的负数映射到格式字符串中的字符。
> SELECT to_number('-$12,345.67', 'S$999,099.99');
-12345.67
-- '$' 符号是必需的。
> SELECT to_number('5', '$9');
Error: 输入 字符串  给定的 数字 格式 不匹配
-- '+' 符号是可选的,小数位数也是可选的。
> SELECT to_number('$345', 'S$999,099.99');
345.00
-- 格式至少需要三个数字。
> SELECT to_number('$45', 'S$999,099.99');
Error: 输入 字符串  给定的 数字 格式 不匹配
-- 格式至少需要三个数字。
> SELECT to_number('$045', 'S$999,099.99');
45.00
-- MI 表示输入字符串开始或结束的可选负号。
> SELECT to_number('1234-', '999999MI');
-1234
-- PR 表示可选的包裹角括号。
> SELECT to_number('9', '999PR')
9

函数 try_to_number

-- '$'符号不是可选的。
> SELECT try_to_number('5', '$9');
NULL
-- 格式要求至少三个数字。
> SELECT try_to_number('$45', 'S$999,099.99');
NULL

函数 to_char

> SELECT to_char(decimal(454), '999');
"454"
-- '99' 可以以更小的大小格式化数字序列。
> SELECT to_char(decimal(1), '99.9');
" 1.0"
-- '000' 为更小的数字序列左边填充0。
> SELECT to_char(decimal(45.1), '000.00');
"045.10"
> SELECT to_char(decimal(12454), '99,999');
"12,454"
-- 较大的数字序列会导致 '#' 序列。
> SELECT to_char(decimal(78.12), '$9.99');
"$#.##"
-- 'S' 可以在末尾。
> SELECT to_char(decimal(-12454.8), '99,999.9S');
"12,454.8-"
> SELECT to_char(decimal(12454.8), 'L99,999.9');
Error: cannot resolve 'to_char(Decimal(12454.8), 'L99,999.9')' 由于 数据 类型 不匹配:
意外的 字符 'L'  格式 字符串 'L99,999.9'中找到格式 字符串 的结构 必须 匹配: [MI|S] [$] [0|9|G|,]* [.|D] [0|9]* [$] [PR|MI|S];  1 位置 25