首批通过分布式安全可靠测评,为关键业务系统打造
TO_CHAR(number)
更新时间:2026-07-15 20:42:45
描述
该函数用于将数值型数据转换为 VARCHAR 类型的数据。
说明
对于 OceanBase 数据库 V4.3.5 版本,该函数从 V4.3.5 BP1 版本开始支持。
语法声明
TO_CHAR(number [, fmt])
参数解释
number:表示要转换的数值型数据。fmt:可选项,用于指定数值输出格式的参数。如果省略fmt,则number被转换为VARCHAR值。具体介绍参见下文 fmt。
fmt
fmt 参数格式取值如下:
数值类
0:是一个占位符,表示一个数字位置。在对应位置返回对应的字符,如果没有则以0填充。注意
0是一个强制的符号,对应位没有,则以0填充。这是与9不同的特性。示例如下:
SELECT TO_CHAR(123, '00000'), TO_CHAR(123.456, '0000.0000');返回结果如下:
+-----------------------+-------------------------------+ | TO_CHAR(123, '00000') | TO_CHAR(123.456, '0000.0000') | +-----------------------+-------------------------------+ | 00123 | 0123.4560 | +-----------------------+-------------------------------+ 1 row in set9:是一个占位符,表示一个数字位置。具体如下:在小数位,则表示转换为对应字符,如果没有则以
0填充。在整数位,没有对应则不填充字符。
示例如下:
SELECT TO_CHAR(123, '999999'), TO_CHAR(123.456, '9999.9999');返回结果如下:
+------------------------+-------------------------------+ | TO_CHAR(123, '999999') | TO_CHAR(123.456, '9999.9999') | +------------------------+-------------------------------+ | 123 | 123.4560 | +------------------------+-------------------------------+ 1 row in set
分组类
.(点号):表示小数点,位于指定位置。若小数部分不足,则补零;若小数部分多余fmt中指定的位数,则进行四舍五入。注意
fmt只能指定一个小数点。示例如下:
SELECT TO_CHAR(123.555, '999.99'), TO_CHAR(123.5, '999.99');返回结果如下:
+----------------------------+--------------------------+ | TO_CHAR(123.555, '999.99') | TO_CHAR(123.5, '999.99') | +----------------------------+--------------------------+ | 123.56 | 123.50 | +----------------------------+--------------------------+ 1 row in set,(英文逗号):一般以千分位出现,作为分组符号使用。如果需要也可以当作是十分位/百分位出现,可以出现 N 次,视乎数字的大小而定。注意
,不能在fmt开头位置并且只能出现在整数部分。示例如下:
SELECT TO_CHAR(123456, '99,99,99'), TO_CHAR(123456789, '999,999,999');返回结果如下:
+-----------------------------+-----------------------------------+ | TO_CHAR(123456, '99,99,99') | TO_CHAR(123456789, '999,999,999') | +-----------------------------+-----------------------------------+ | 12,34,56 | 123,456,789 | +-----------------------------+-----------------------------------+ 1 row in setD(ISO 小数位符号):"点号" 的国际版本(ISO),跟.的作用相同,只能出现一次。所不同的是,该元素会使用参数NLS_NUMERIC_CHARACTER的默认值。注意
没有特别需要一般不要用这个格式符号,也不要轻易修改参数值(
NLS_NUMERIC_CHARACTER)。示例如下:
SELECT TO_CHAR(123.555, '999D99'), TO_CHAR(123.5, '999D99');返回结果如下:
+----------------------------+--------------------------+ | TO_CHAR(123.555, '999D99') | TO_CHAR(123.5, '999D99') | +----------------------------+--------------------------+ | 123.56 | 123.50 | +----------------------------+--------------------------+ 1 row in setG:"逗号" 的 ISO 标准,作为分组符号使用,可以放在多个地方使用。注意
如果要转换出小数点,则要和
D配合使用,不能和点号(.)配合。示例如下:
SELECT TO_CHAR(123456, '99G99G99'), TO_CHAR(123456789, '999G999G999');返回结果如下:
+-----------------------------+-----------------------------------+ | TO_CHAR(123456, '99G99G99') | TO_CHAR(123456789, '999G999G999') | +-----------------------------+-----------------------------------+ | 12,34,56 | 123,456,789 | +-----------------------------+-----------------------------------+ 1 row in set
货币类
$(美元符号):返回带前导美元符号的值。注意
$可以放在fmt的任意地方,但是只能出现一次。示例如下:
SELECT TO_CHAR(123.45, '$999.99'), TO_CHAR(123.45, '9,9,9,9.$99');返回结果如下:
+----------------------------+--------------------------------+ | TO_CHAR(123.45, '$999.99') | TO_CHAR(123.45, '9,9,9,9.$99') | +----------------------------+--------------------------------+ | $123.45 | $1,2,3.45 | +----------------------------+--------------------------------+ 1 row in setC(国际货币符号):在指定位置返回 ISO 货币符号(当前NLS_ISO_CURRENCY参数所代表的值)。注意
C只能出现在fmt整数部位第一位。示例如下:
SELECT TO_CHAR(123.45, 'C999.99');返回结果如下:
+----------------------------+ | TO_CHAR(123.45, 'C999.99') | +----------------------------+ | USD123.45 | +----------------------------+ 1 row in setL(本地货币符号):是C的本地版本,在指定位置返回本地货币符号,可以放在整个格式的最前面和最后面。示例如下:
SELECT TO_CHAR(123.45, 'L999.99'), TO_CHAR(123.45, '999.99L');返回结果如下:
+----------------------------+----------------------------+ | TO_CHAR(123.45, 'L999.99') | TO_CHAR(123.45, '999.99L') | +----------------------------+----------------------------+ | $123.45 | 123.45$ | +----------------------------+----------------------------+ 1 row in setU:在指定位置返回由NLS_DUAL_CURRENCY参数代表的当前值确定的欧元(或其他)双货币符号。示例如下:
SELECT TO_CHAR(123.45, 'U999.99'), TO_CHAR(123.45, '999.99U'), TO_CHAR(123.45, '999U999');返回结果如下:
+----------------------------+----------------------------+----------------------------+ | TO_CHAR(123.45, 'U999.99') | TO_CHAR(123.45, '999.99U') | TO_CHAR(123.45, '999U999') | +----------------------------+----------------------------+----------------------------+ | $123.45 | 123.45$ | 123$450 | +----------------------------+----------------------------+----------------------------+ 1 row in set
计算转换类
EEEE(科学计算符):返回使用科学计数法表示的值。由于是科学计算方法,所以小数位前面加一个 9 或者 0 即可,多个是没有意义的。示例如下:
SELECT TO_CHAR(10000, '9EEEE'), TO_CHAR(10000, '9.9EEEE'), TO_CHAR(10000, '999.9EEEE');返回结果如下:
+-------------------------+---------------------------+-----------------------------+ | TO_CHAR(10000, '9EEEE') | TO_CHAR(10000, '9.9EEEE') | TO_CHAR(10000, '999.9EEEE') | +-------------------------+---------------------------+-----------------------------+ | 1E+04 | 1.0E+04 | 1.0E+04 | +-------------------------+---------------------------+-----------------------------+ 1 row in setRN(rn):把整数(1 至 3999 之间)转换为罗马字符。RN表示转为大写,rn表示转为小写。注意
RN(rn)不能和其它符号组合使用。示例如下:
SELECT TO_CHAR(99, 'RN'), TO_CHAR(99, 'rn');返回结果如下:
+-------------------+-------------------+ | TO_CHAR(99, 'RN') | TO_CHAR(99, 'rn') | +-------------------+-------------------+ | XCIX | xcix | +-------------------+-------------------+ 1 row in setV:返回一个乘以10^n的值(如有必要,将其四舍五入),其中n是V后面的数字 9 的个数。注意
V在fmt格式中不能和小数表达写在一起,但是可以混合货币等符号使用。示例如下:
SELECT TO_CHAR(123.456, '999V99'), TO_CHAR(123.4, '999V999'), TO_CHAR(5, '9V');返回结果如下:
+----------------------------+---------------------------+------------------+ | TO_CHAR(123.456, '999V99') | TO_CHAR(123.4, '999V999') | TO_CHAR(5, '9V') | +----------------------------+---------------------------+------------------+ | 12346 | 123400 | 5 | +----------------------------+---------------------------+------------------+ 1 row in setX:返回指定位数的十六进制值。如果指定的数字不是整数,则将其舍入为整数。限制如下:此元素只接受正值或 0。负值返回一个错误。
只能在该元素前面加 0(返回前导零)或 FM。任何其他元素都会返回错误。如果使用 X 既不指定 0 也不指定 FM,则返回值始终有一个前导空格。
示例如下:
SELECT TO_CHAR(10, 'X'), TO_CHAR(10, 'XXXX');返回结果如下:
+------------------+---------------------+ | TO_CHAR(10, 'X') | TO_CHAR(10, 'XXXX') | +------------------+---------------------+ | A | A | +------------------+---------------------+ 1 row in set
正负符号
MI(mi):返回带有尾随减号(-)的负值。如果是正数,则在末尾加上空格。注意
MI格式元素只能出现在数字格式模型的最后一个位置。示例如下:
SELECT TO_CHAR(-123, '999MI'), TO_CHAR(-123, '999mi');返回结果如下:
+------------------------+------------------------+ | TO_CHAR(-123, '999MI') | TO_CHAR(-123, '999mi') | +------------------------+------------------------+ | 123- | 123- | +------------------------+------------------------+ 1 row in setPR:表达负数的另外一种方式:如果是正数,则在开头位置加上空格。
如果是负数,则用尖括号
<>把数字包起来。注意
PR格式元素只能出现在数字格式模型的最后一个位置。示例如下:
SELECT TO_CHAR(-1234.89,'9G999D00PR'), TO_CHAR(1234.89,'9G999D00PR');返回结果如下:
+--------------------------------+-------------------------------+ | TO_CHAR(-1234.89,'9G999D00PR') | TO_CHAR(1234.89,'9G999D00PR') | +--------------------------------+-------------------------------+ | <1,234.89> | 1,234.89 | +--------------------------------+-------------------------------+ 1 row in set
S:为正数加一个正号(+),为负数加一个负号(-)。注意
S格式元素只能出现在数字格式模型的第一个或最后一个位置。示例如下:
SELECT TO_CHAR(-123.45,'S999.99'), TO_CHAR(123.45,'S999.99');返回结果如下:
+----------------------------+---------------------------+ | TO_CHAR(-123.45,'S999.99') | TO_CHAR(123.45,'S999.99') | +----------------------------+---------------------------+ | -123.45 | +123.45 | +----------------------------+---------------------------+ 1 row in set
正统类
TM:默认值为 TM9,除非输出超过 64 个字符,否则以固定符号返回数字。如果输出超过 64 个字符,将自动以科学记数法返回该数字。当数字长度超过 64 位时候,TM9 的输出等同于 TME 的输出。
示例如下:
SELECT TO_CHAR(1234, 'TM9'), TO_CHAR(1234, 'TME');
返回结果如下:
+----------------------+----------------------+
| TO_CHAR(1234, 'TM9') | TO_CHAR(1234, 'TME') |
+----------------------+----------------------+
| 1234 | 1.234E+03 |
+----------------------+----------------------+
1 row in set
其它类
B(空格符):在整数部分最前面加一个空格,可以出现在任意位置。注意
B只能出现在整数部位。示例如下:
SELECT TO_CHAR(1234, '99B99'), TO_CHAR(1234, '9999B'), TO_CHAR(1234, 'B9999');返回结果如下:
+------------------------+------------------------+------------------------+ | TO_CHAR(1234, '99B99') | TO_CHAR(1234, '9999B') | TO_CHAR(1234, 'B9999') | +------------------------+------------------------+------------------------+ | 1234 | 1234 | 1234 | +------------------------+------------------------+------------------------+ 1 row in setFM(fm):去除前面的空格。注意
FM只能出现在fmt整数部位第一位。示例如下:
SELECT TO_CHAR(' 123.456', 'fm999.999'), TO_CHAR(' 123.456', 'FM999.999');返回结果如下:
+-----------------------------------+-----------------------------------+ | TO_CHAR(' 123.456', 'fm999.999') | TO_CHAR(' 123.456', 'FM999.999') | +-----------------------------------+-----------------------------------+ | 123.456 | 123.456 | +-----------------------------------+-----------------------------------+ 1 row in set
返回类型
- 返回
VARCHAR类型的数据。 number值为NULL时,返回NULL。
示例
SELECT
TO_CHAR(11111.111, '999,999.9999'),
TO_CHAR(11111.111, '000,000.0000'),
TO_CHAR(55555.555, '99,999.99'),
TO_CHAR(55555.555, '99,999V99'),
TO_CHAR(NULL, '999.999');
返回结果如下:
+------------------------------------+------------------------------------+---------------------------------+---------------------------------+--------------------------+
| TO_CHAR(11111.111, '999,999.9999') | TO_CHAR(11111.111, '000,000.0000') | TO_CHAR(55555.555, '99,999.99') | TO_CHAR(55555.555, '99,999V99') | TO_CHAR(NULL, '999.999') |
+------------------------------------+------------------------------------+---------------------------------+---------------------------------+--------------------------+
| 11,111.1110 | 011,111.1110 | 55,555.56 | 55,55556 | NULL |
+------------------------------------+------------------------------------+---------------------------------+---------------------------------+--------------------------+
1 row in set