跳到主要内容

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)
  • RNrn):把整数(1 至 3999 之间)转换为罗马字符。RN 表示转为大写,rn 表示转为小写。

    提示

    RNrn)不能和其它符号组合使用。

    示例如下:

    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 的值(如有必要,将其四舍五入),其中 nV 后面的数字 9 的个数。

    提示

    Vfmt 格式中不能和小数表达写在一起,但是可以混合货币等符号使用。

    示例如下:

    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)

正负符号

  • MImi):返回带有尾随减号(-)的负值。如果是正数,则在末尾加上空格。

    提示

    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)
  • FMfm):去除前面的空格。

    提示

    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)

相关文档