---
title: "CAST - OceanBase 数据库 V4.5.0 | OceanBase 文档中心"
description: "CAST 描述 该函数用于将一种内置数据类型转换为另一种内置数据类型。 语法 CAST ({ expr | MULTISET (subquery) } AS type_name ) 参数解释 参数 说明 expr 列名或者表达式。 MULTISET 如果 subquery 的结果集可以为多行，则必须指定 MULTIS…"
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*P8CuR4UJ_FkAAAAAAAAAAAAADiGDAQ/original) OceanBase 数据库分布式版 - V 4.5.0

# CAST

更新时间：2026-04-05 11:39:03

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.5.0/zh-CN/700.reference/500.sql-reference/100.sql-syntax/300.common-tenant-of-oracle-mode/500.functions-of-oracle-mode/200.single-row-functions-of-oracle-mode/600.conversion-functions-of-oracle-mode/200.cast-of-oracle-mode.md)  

## 描述

该函数用于将一种内置数据类型转换为另一种内置数据类型。

## 语法

```sql
CAST ({ expr | MULTISET (subquery) }  AS type_name )

```

## 参数解释

| 参数 | 说明 |
| --- | --- |
| expr | 列名或者表达式。 |
| MULTISET | 如果 `subquery` 的结果集可以为多行，则必须指定 `MULTISET` 关键字。`CAST(MULTISET (subquery) ) AS` 的结果是集合类型，子查询产生的行被转换为对应的集合元素。如果没有 `MULTISET` 关键字，子查询将被视为标量子查询。 |
| AS | 用于分隔两个参数，在 `AS` 之前的是要处理的数据，在 `AS` 之后是要转换的数据类型。 |
| type_name | OceanBase 数据库的内建数据类型名称。 |

## 返回类型

返回与 `type_name` 相同的类型。

下表显示了哪些数据类型可以转换为其他内置数据类型：

|  | **from BINARY_FLOAT, BINARY_DOUBLE** | **from CHAR, VARCHAR2** | **from NUMBER** | **from DATETIME/INTERVAL** | **from RAW** | **from NCHAR, NVARCHAR2** |
| --- | --- | --- | --- | --- | --- | --- |
| **to BINARY_FLOAT, BINARY_DOUBLE** | yes | yes | yes | no | no | yes |
| **to CHAR, VARCHAR2** | yes | yes | yes | yes | yes | no |
| **to NUMBER** | yes | yes | yes | no | no | yes |
| **to DATETIME, INTERVAL** | no | yes | no | yes | no | no |
| **to RAW** | yes | yes | yes | no | yes | no |
| **to NCHAR, NVARCHAR2** | yes | no | yes | yes | yes | yes |

#### 说明

`to DATETIME/INTERVAL` 数据类型包括 `DATE`、`TIMESTAMP`、`TIMESTAMP WITH TIMEZONE`、`INTERVAL DAY TO SECOND` 和 `INTERVAL YEAR TO MONTH`。

## 示例

如下示例分别将字符型 `123` 转化为整型、整数 `1` 转化为 `VARCHAR2(10)` 类型、将 `22-OCT-2021` 转化为 `TIMESTAMP WITH LOCAL TIME ZONE` 类型。

```sql
obclient> SELECT CAST('123' AS INT),CAST(1 AS VARCHAR2(10)),CAST('22-OCT-2021' AS TIMESTAMP WITH LOCAL TIME ZONE)
    AS RESULT FROM DUAL;
+------------------+-----------------------+------------------------------+
| CAST('123'ASINT) | CAST(1ASVARCHAR2(10)) | RESULT                       |
+------------------+-----------------------+------------------------------+
|              123 | 1                     | 22-OCT-21 12.00.00.000000 AM |
+------------------+-----------------------+------------------------------+
1 row in set

```

#### 说明

在转换日期类型的数据时此函数会受 `NLS_DATE_FORMAT` 参数的影响，建议先执行如下语句更改 `NLS_DATE_FORMAT` 格式：`ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS';`

如下示例为在 Table Function 里使用 `MULTISET` 获取集合类型的结果。

```sql
obclient> CREATE OR REPLACE TYPE tbl_int AS TABLE OF INT;
Query OK, 0 rows affected
obclient> CREATE TABLE t1(c1 INT, c2 INT);
Query OK, 0 rows affected
obclient> CREATE TABLE t2(c1 INT, c2 INT);
Query OK, 0 rows affected
obclient> INSERT INTO t1 VALUES (1,1);
Query OK, 1 row affected
obclient> INSERT INTO t2 VALUES (1,2);
Query OK, 1 row affected
obclient> INSERT INTO t2 VALUES (1,3);
Query OK, 1 row affected
obclient> SELECT * FROM t1,TABLE(CAST(MULTISET(SELECT t2.c2 FROM t2 WHERE t1.c1=t2.c1) AS tbl_int));
+------+------+--------------+
| C1   | C2   | COLUMN_VALUE |
+------+------+--------------+
|    1 |    1 |            2 |
|    1 |    1 |            3 |
+------+------+--------------+

```

 上一篇 下一篇 ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
