类别:

转换函数

TO_CHAR、TO_VARCHAR

将输入表达式转换为字符串。对于 NULL 输入,输出为 NULL。

这些函数为同义函数。

语法

TO_CHAR( <expr> )
TO_CHAR( <numeric_expr> [, '<format>' ] )
TO_CHAR( <date_or_time_expr> [, '<format>' ] )
TO_CHAR( <binary_expr> [, '<format>' ] )

TO_VARCHAR( <expr> )
TO_VARCHAR( <numeric_expr> [, '<format>' ] )
TO_VARCHAR( <date_or_time_expr> [, '<format>' ] )
TO_VARCHAR( <binary_expr> [, '<format>' ] )
Copy

实参

必填:

expr

任何数据类型的表达式。

numeric_expr

数值表达式。

date_or_time_expr

DATE、TIME 或 TIMESTAMP 类型的表达式。

binary_expr

BINARY 或 VARBINARY 类型的表达式。

可选:

format

输出字符串的格式:

  • 对于 numeric_expr,指定用于解释数字表达式的 SQL 格式模型。有关更多信息,请参阅 SQL 格式模型

  • 对于 date_or_time_expr,指定解析或生成字符串的预期格式。有关更多信息,请参阅 转换函数中的日期和时间格式

    默认值为以下会话参数的当前值:

    • :ref:`label-DATE_OUTPUT_FORMAT`(用于 DATE 输入)

    • :ref:`label-TIME_OUTPUT_FORMAT`(用于 TIME 输入)

    • :ref:`label-TIMESTAMP_OUTPUT_FORMAT`(用于 TIMESTAMP 输入)

  • 对于 binary_expr,指定生成字符串的格式(例如 'HEX'、'BASE64' 或 'UTF-8')。

    有关更多信息,请参阅 Overview of Supported Binary Formats

返回

此函数返回 VARCHAR 数据类型的值或 NULL 值。

使用说明

  • 对于 VARIANT、ARRAY 或 OBJECT 输入,输出是包含 JSON 文档或 JSON 基本值的字符串(除非 VARIANT 或 OBJECT 包含 XML 标签,在这种情况下,输出是包含 XML 文档的字符串):

    • 存储在 VARIANT 中的字符串按原样保留(即不转换为 JSON 字符串)。

    • JSON null 值被转换为包含“null”一词的字符串。

示例

以下示例将数字、时间戳和日期转换为字符串。

转换数字的例子

将数值转换为指定 格式 的字符串:

CREATE OR REPLACE TABLE convert_numbers_to_strings(column1 NUMBER);

INSERT INTO convert_numbers_to_strings VALUES
  (-12.391),
  (0),
  (-1),
  (0.10),
  (0.01),
  (3987),
  (1.111);

SELECT column1 AS orig_value,
       TO_CHAR(column1, '">"$99.0"<"') AS D2_1,
       TO_CHAR(column1, '">"B9,999.0"<"') AS D4_1,
       TO_CHAR(column1, '">"TME"<"') AS TME,
       TO_CHAR(column1, '">"TM9"<"') AS TM9,
       TO_CHAR(column1, '">"0XXX"<"') AS X4,
       TO_CHAR(column1, '">"S0XXX"<"') AS SX4
  FROM convert_numbers_to_strings;
Copy
+------------+----------+------------+-------------+------------+--------+---------+
| ORIG_VALUE | D2_1     | D4_1       | TME         | TM9        | X4     | SX4     |
|------------+----------+------------+-------------+------------+--------+---------|
|    -12.391 | >-$12.4< | >   -12.4< | >-1.2391E1< | >-12.391<  | >FFF4< | >-000C< |
|      0.000 | >  $0.0< | >      .0< | >0E0<       | >0.000<    | >0000< | >+0000< |
|     -1.000 | > -$1.0< | >    -1.0< | >-1E0<      | >-1.000<   | >FFFF< | >-0001< |
|      0.100 | >  $0.1< | >      .1< | >1E-1<      | >0.100<    | >0000< | >+0000< |
|      0.010 | >  $0.0< | >      .0< | >1E-2<      | >0.010<    | >0000< | >+0000< |
|   3987.000 | > $##.#< | > 3,987.0< | >3.987E3<   | >3987.000< | >0F93< | >+0F93< |
|      1.111 | >  $1.1< | >     1.1< | >1.111E0<   | >1.111<    | >0001< | >+0001< |
+------------+----------+------------+-------------+------------+--------+---------+

输出说明了如何根据指定的格式将值转换为字符串:

  • >< 符号是包含在输出中的字符串字面量。这样更容易看到插入空格的位置。

  • D2_1 列显示数值,数字前打印 $

    • 对于 3987 值,数字整数部分的位数超过了格式中数字位置的数量,因此所有位数都打印为 #,以表示溢出。

    • 对于 0.100.011.111 值,其小数部分的位数超过了格式中数字位置的数量,因此小数值被截断。

  • D4_1 列显示,数字的整数部分中的零值被表示为空格。

    • 对于 00.100.01 值,分隔符前的零用空格代替。

    • 对于 0.100.011.111 值,其小数部分的位数超过了格式中数字位置的数量,因此小数值被截断。

  • TME 列以科学符号显示值。

  • TM9 列根据数字的值将值显示为整数或小数部分。

  • X4 列将值显示为十六进制数字,不含小数部分。

  • SX4 列显示数值的绝对值的十六进制数字,并包含数字符号(+-)。

此示例将一个对数值转换为字符串:

SELECT TO_VARCHAR(LOG(3,4));
Copy
+----------------------+
| TO_VARCHAR(LOG(3,4)) |
|----------------------|
| 1.261859507          |
+----------------------+

转换时间戳和日期的示例

将 TIMESTAMP 值转换为指定格式的字符串:

SELECT TO_VARCHAR('2024-04-05 01:02:03'::TIMESTAMP, 'mm/dd/yyyy, hh24:mi hours');
Copy
+---------------------------------------------------------------------------+
| TO_VARCHAR('2024-04-05 01:02:03'::TIMESTAMP, 'MM/DD/YYYY, HH24:MI HOURS') |
|---------------------------------------------------------------------------|
| 04/05/2024, 01:02 hours                                                   |
+---------------------------------------------------------------------------+

将 DATE 值转换为默认格式的字符串:

SELECT TO_VARCHAR('03-April-2024'::DATE);
Copy
+-----------------------------------+
| TO_VARCHAR('03-APRIL-2024'::DATE) |
|-----------------------------------|
| 2024-04-03                        |
+-----------------------------------+

将 DATE 值转换为指定格式的字符串:

SELECT TO_VARCHAR('03-April-2024'::DATE, 'yyyy.mm.dd');
Copy
+-------------------------------------------------+
| TO_VARCHAR('03-APRIL-2024'::DATE, 'YYYY.MM.DD') |
|-------------------------------------------------|
| 2024.04.03                                      |
+-------------------------------------------------+
语言: 中文