TO_CHAR(number)
描述
该函数用于将数值型数据转换为 VARCHAR 类型的数据。
语法声明
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 set (0.001 sec) -
9:是一个占位符,表示一个数字位置。具体如下:-
在小数位,则表示转换为对应字符,如果没有则以
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 (0.000 sec)
-
分组类
-
.(点号):表示小数点,位于指定位置。若小数部分不足,则补零;若小数部分多余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 (0.001 sec) -
,(英文逗号):一般以千分位出现,作为分 组符号使用。如果需要也可以当作是十分位/百分位出现,可以出现 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 set (0.001 sec) -
D(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 set (0.000 sec) -
G:"逗号" 的 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 (0.000 sec)
货币类
-
$(美元符号):返回带前导美元符号的值。提示$可以放在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 set (0.001 sec) -
C(国际货币符号):在指定位置返回 ISO 货币符号(当前NLS_ISO_CURRENCY参数所代表的值)。提示C只能出现在fmt整数部位第一位。示例如下:
SELECT TO_CHAR(123.45, 'C999.99');返回结果如下:
+----------------------------+
| TO_CHAR(123.45, 'C999.99') |
+----------------------------+
| USD123.45 |
+----------------------------+
1 row in set (0.001 sec) -
L(本地货币符号):是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 set (0.000 sec) -
U:在指定位置返回由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 (0.001 sec)
计算转换类
-
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 set (0.001 sec) -
RN(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 set -
V:返回一个乘以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 set (0.001 sec) -
X:返回指定位数的十六进制值。如果指定的数字不是整数,则将其舍入为整数。限制如下:-
此元素只接受正值或 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 (0.001 sec)
-
正负符号
-
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 set (0.000 sec) -
PR:表达负数的另外一种方式:-
如果是正数,则在开头位置加上空格。
-
如果是负数,则用尖括号
<>把数字包起来。提示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 (0.001 sec)
-
-
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 (0.001 sec)
正统类
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 (0.000 sec)
其它类
-
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 set (0.001 sec) -
FM(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 (0.001 sec)
返回类型
- 返回
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 (0.001 sec)