---
title: "数据类型转换规则 - OceanBase 数据库 V4.3.5 | OceanBase 文档中心"
description: 数据类型转换规则 通常，表达式不能包含不同数据类型的值，为了使表达式之间可以进行计算，OceanBase 数据库支持从一个数据类型到另一个数据类型的值的隐式转换和显式转换。本文主要介绍数据类型的隐式和显式转换规则。 注意 OceanBase 数据库建议您指定显式转换，而不是依赖隐式或自动转换。 隐式数据类型转换 当数…
---
切换语言

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

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

# 数据类型转换规则

更新时间：2026-07-15 20:42:46

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.3.5/zh-CN/700.reference/500.sql-reference/100.sql-syntax/300.common-tenant-of-oracle-mode/300.basic-elements-of-oracle-mode/200.data-type-comparison-rules-of-oracle-mode/600.data-type-conversion-of-oracle-mode.md)  

通常，表达式不能包含不同数据类型的值，为了使表达式之间可以进行计算，OceanBase 数据库支持从一个数据类型到另一个数据类型的值的隐式转换和显式转换。本文主要介绍数据类型的隐式和显式转换规则。

#### 注意

OceanBase 数据库建议您指定显式转换，而不是依赖隐式或自动转换。

## 隐式数据类型转换

当数据类型转换有意义时，OceanBase 数据库会自动将一个值从一种数据类型转换为另一种数据类型。

隐式数据类型的转换规则如下：

- 执行 `INSERT` 和 `UPDATE` 操作时，OceanBase 数据库把变量值转换成受影响列的类型。
 - 执行 `SELECT FROM` 操作时，OceanBase 数据库把列的数据类型转换成目标变量的类型。
 - 当字符值和数值进行比较时，OceanBase 数据库把字符值转换成数值。
 - 在处理数值时，OceanBase 数据库会调整精度和小数位数。由此产生的数值数据类型与基础表中找到的数值数据类型不同。
 - 字符值或 NUMBER 值与浮点数值之间的转换可以是不精确的，因为字符类型和 NUMBER 值类型使用十进制精度来表示数值，而浮点数使用二进制精度。
 - 当一个 `CLOB` 值转换为一个字符类型（例如 `VARCHAR2`），或着 `BLOB` 转换为 `RAW` 数据时。如果要转换的数据大于目标数据类型，那么数据库会返回错误信息。
 - 在从时间戳值转换为 `DATE` 值的过程中，时间戳值的小数秒部分被截断，并且对时间戳值的小数秒部分进行四舍五入。
 - 从 `BINARY_FLOAT` 转换为 `BINARY_DOUBLE` 是精确的。
 - 如果 `BINARY_DOUBLE` 的精度位数超出了 `BINARY_FLOAT` 支持的精度位数，则将 `BINARY_DOUBLE` 转换为 `BINARY_FLOAT` 是不精确的。
 - 当将字符值与 `DATE` 值进行比较时，OceanBase 数据库将字符数据转换为 `DATE` 类型。
 - 进行赋值操作时，OceanBase 数据库把等号右边的值转换成左边赋值目标的数据类型。
 - 进行连接操作时，OceanBase 数据库把非字符类型转换成字符类型或国家字符类型。

### 数据类型隐式转换矩阵

下表为所有数据类型的隐式转换矩阵，不需要考虑转换的方向或转换的上下文。

#### 说明

"-"表示不支持转换。

| **数据类型** | **CHAR** | **VARCHAR** | **VARCHAR2** | **NCHAR** | **NVARCHAR2** | **DATE** | **TIMESTAMP** | **INTERVAL** | **NUMBER** | **FLOAT** | **BINARY_FLOAT** | **BINARY_DOUBLE** | **RAW** | **CLOB** | **BLOB** |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| CHAR | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | - |
| VARCHAR | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | - |
| VARCHAR2 | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | - |
| NCHAR | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | - |
| NVARCHAR2 | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | - |
| DATE | Yes | Yes | Yes | Yes | Yes | Yes | Yes | - | - | - | - | - | - | - | - |
| TIMESTAMP | Yes | Yes | Yes | Yes | Yes | Yes | Yes | - | - | - | - | - | - | - | - |
| INTERVAL | Yes | Yes | Yes | Yes | Yes | Yes | - | Yes | - | - | - | - | - | - | - |
| NUMBER | Yes | Yes | Yes | Yes | Yes | - | - | - | Yes | Yes | Yes | Yes | - | - | - |
| FLOAT | Yes | Yes | Yes | Yes | Yes | Yes | - | - | Yes | Yes | Yes | Yes | - | - | - |
| BINARY_FLOAT | Yes | Yes | Yes | Yes | Yes | Yes | - | - | Yes | Yes | Yes | Yes | - | - | - |
| BINARY_DOUBLE | Yes | Yes | Yes | Yes | Yes | Yes | - | - | Yes | Yes | Yes | Yes | - | - | - |
| RAW | Yes | Yes | Yes | Yes | Yes | - | - | - | - | - | - | - | Yes | - | - |
| CLOB | Yes | Yes | Yes | Yes | Yes | Yes | - | - | - | - | - | - | - | Yes | - |
| BLOB | - | - | - | - | - | - | - | - | - | - | - | - | Yes | - | Yes |

^1^ 您不能直接将 `RAW` 转换为 `INTERVAL`，但是可以使用 `UTL_RAW.CAST_TO_VARCHAR2([RAW])` 将 `RAW` 转换为 `VARCHAR2`，然后将所得的 `VARCHAR2` 值转换为 `INTERVAL`。

### 隐式数据类型转换示例

- 执行如下示例语句时，OceanBase 使用了隐式数据类型转换，将 `'james'` 转换为数字类型，但是转换失败，并收到报错。

  ```sql
  obclient> SELECT 5 * 10 + 'james' FROM DUAL;
  ORA-01722: invalid number

  ```
 - 将字符串 `'2'` 从 `CHAR` 数据类型隐式转换为了数值数据类型 **2**，计算结果为 **52**。

  ```sql
  obclient> SELECT 5 * 10 + '2' FROM  DUAL;
  +----------+
  | 5*10+'2' |
  +----------+
  |       52 |
  +----------+
  1 row in set

  ```

## 显式数据类型转换

您可以使用 SQL 转换函数来转换数据类型，SQL 函数显式转换一个数据类型为另一个数据类型。

### 显式类型转换矩阵

| **数据类型** | **CHAR** | **NCHAR** | **NVARCHAR2** | **VARCHAR2** | **VARCHAR** | **NUMBER** | **FLOAT** | **BINARY_FLOAT** | **BINARY_DOUBLE** | **DATE** | **TIMESTAMP** | **INTERVAL** | **RAW** | **BLOB** | **CLOB** |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| CHAR | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | - | - | - | - | - | - |
| NCHAR | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | - | - | - | - | - | - |
| NVARCHAR2 | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | - | - | - | Yes | - | - |
| VARCHAR2 | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | - | - | - | Yes | - | - |
| VARCHAR | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | - | - | - | Yes | - | - |
| NUMBER | - | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | - | - | - | - | - | - |
| FLOAT | - | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | - | - | - | - | - | - |
| BINARY_FLOAT | - | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | - | - | - | - | - | - |
| BINARY_DOUBLE | - | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | - | - | - | - | - | - |
| DATE | - | Yes | Yes | Yes | Yes | - | - | - | - | Yes | Yes | - | - | - | - |
| TIMESTAMP | - | Yes | Yes | Yes | Yes | - | - | - | - | Yes | Yes | - | - | - | - |
| INTERVAL | - | Yes | Yes | Yes | Yes | - | - | - | - | - | - | Yes | - | - | - |
| RAW | Yes | Yes | Yes | Yes | Yes | - | - | - | - | - | - | - | Yes | - | - |
| BLOB | - | - | - | - | - | - | - | - | - | - | - | - | - | Yes | - |
| CLOB | Yes | Yes | Yes | Yes | Yes | - | - | - | - | - | - | - | - | - | - |

### 显式数据类型转换示例

当前的时间通过 `TO_CHAR` 函数显式转换为指定的格式输出。

```sql
obclient> SELECT TO_CHAR(SYSDATE, 'YYYY_MM_DD') FROM DUAL;
+-------------------------------+
| TO_CHAR(SYSDATE,'YYYY_MM_DD') |
+-------------------------------+
| 2021_11_30                    |
+-------------------------------+
1 row in set

```

 上一篇 下一篇 ![有帮助](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) 咨询热线
