---
title: "CAST - OceanBase 数据库 V4.3.0 | OceanBase 文档中心"
description: CAST 语法声明 CAST(expr AS type) 说明 CAST() 将某种数据类型的表达式显式转换为另一种数据类型，即将 expr 字段值转换为 type 数据类型。 参数说明 参数解释如下： expr ：表示任何有效的 SQL 表达式。 AS ：用于分隔两个参数，在 AS 之前的是要处理的数据，在 AS …
---
切换语言

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

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

# CAST

更新时间：2026-04-10 11:58:35

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

## 语法声明

```sql
CAST(expr AS type)

```

## 说明

`CAST()` 将某种数据类型的表达式显式转换为另一种数据类型，即将 `expr` 字段值转换为 `type` 数据类型。

### 参数说明

参数解释如下：

- `expr`：表示任何有效的 SQL 表达式。
 - `AS`：用于分隔两个参数，在 `AS` 之前的是要处理的数据，在 `AS` 之后是要转换的数据类型。
 - `type`：表示目标系统所提供的数据类型。支持如下类型：

     - `CHAR[(N)] [CHARACTER SET charset_name]`

      生成具有 `CHAR` 数据类型的字符串。除了当表达式 `expr` 为空（长度为 0）时，结果类型为 `CHAR(0)`。如果指定了可选长度 `N`，`CHAR(N)` 会强制转换为使用不超过 `N` 个参数的字符，短于 `N` 个字符长度的值不会发生填充；如果没有指定可选长度 `N`，OceanBase 数据库会根据表达式计算最大长度。如果没有 `CHARACTER SET charset_name` 子句，`CHAR` 会生成具有默认字符集的字符串。
     - `DATE`：产生一个 `DATE` 值。
     - `DATETIME [ (M) ]`：产生一个 `DATETIME` 值。`M` 值是可选的，用于指定小数位上秒的精度，范围为 [0,6]。
     - `DECIMAL [ (M [,D] ) ]`：产生一个 `DECIMAL` 值。`M` 和 `D` 值是可选的，它们分别指定最大位数（精度）和小数点后的位数（小数位数）。 `M` 最大值为 65，`D` 最大值为 30。如果省略 `D`，则默认为 `0`; 如果省略 `M`，则默认为 `10`。
     - `SIGNED [INTEGER]`：产生一个有符号的 `BIGINT` 值。
     - `JSON`：生成 `JSON` 值。有关 JSON 与其他类型的值转换规则，请参见 [JSON 数据类型转换](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000644323)。
     - `TIME [ (M) ]`：产生一个 `TIME` 值。 如果给出了可选的 M 值，则它指定小数位上秒的精度。
     - `UNSIGNED [INTEGER]`：产生一个无符号的 `BIGINT` 值。

### 使用说明

在使用 `CAST` 函数进行数据类型转换时，支持以下情况：

- 两个表达式的数据类型完全相同
 - 两个表达式可隐式转换
 - 必须显式转换数据类型

当用户试图进行不可能的转换，OceanBase 数据库将显示一条错误信息。如果转换时没有指定数据类型的长度，则使用 OceanBase 数据库系统内部最大长度。例如 `VARCHAR` 是 262,143 字节，`NUMBER` 是 65 比特位的浮动精度。

`CAST()` 支持带符号和无符号的 64 比特值的运算。如果您正在使用数字操作符 (例如 `+`) 而其中一个操作数为无符号整数，则结果为无符号。您可以使用 `SIGNED` 和 `UNSIGNED` 对结果进行显式声明，将运算分别指定为带符号或无符号的 64 比特位的整数。如果任意一个操作数为一个浮点值，则结果为一个浮点值。

## 示例

- 将数值 0 转换为 `DATE` 类型。

  ```sql
  obclient> SELECT CAST(0 AS DATE);
  +-----------------+
  | CAST(0 AS DATE) |
  +-----------------+
  | 0000-00-00      |
  +-----------------+
  1 row in set

  ```
 - 将数值 123 转换为 `TIME` 类型。

  ```sql
  obclient> SELECT CAST(123 AS TIME);
  +-------------------+
  | CAST(123 AS TIME) |
  +-------------------+
  | 00:01:23          |
  +-------------------+
  1 row in set

  ```
 - 将数值 123 转换为 `DATETIME` 类型。

  ```sql
  obclient> SELECT CAST(123 AS DATETIME(4));
  +--------------------------+
  | CAST(123 AS DATETIME(4)) |
  +--------------------------+
  | 2000-01-23 00:00:00.0000 |
  +--------------------------+
  1 row in set

  ```
 - 将数值 123 转换为 `DECIMAL` 类型。

  ```sql
  obclient>  SELECT CAST(123 AS DECIMAL(3,2));
  +---------------------------+
  | CAST(123 AS DECIMAL(3,2)) |
  +---------------------------+
  |                      9.99 |
  +---------------------------+
  1 row in set

  ```
 - 将字符串文本 "123" 转换为 JSON 类型。

  ```sql
  obclient> SELECT CAST("123" AS JSON);
  +---------------------+
  | CAST("123" AS JSON) |
  +---------------------+
  | 123                 |
  +---------------------+
  1 row in set

  ```
 - 将 "1-2"的结果分别使用无符号表示和有符号表示。

  ```sql
  obclient> SELECT CAST(1-2 AS UNSIGNED), CAST(cast(1-2 AS UNSIGNED) AS SIGNED);
  +-----------------------+---------------------------------------+
  | CAST(1-2 AS UNSIGNED) | CAST(cast(1-2 AS UNSIGNED) AS SIGNED) |
  +-----------------------+---------------------------------------+
  |  18446744073709551615 |                                    -1 |
  +-----------------------+---------------------------------------+
  1 row in set

  ```
 - 使用 `CAST()` 进行数值运算。

  ```sql
  obclient> SELECT CAST(1 AS UNSIGNED) - 2.0;
  +---------------------------+
  | CAST(1 AS UNSIGNED) - 2.0 |
  +---------------------------+
  |                      -1.0 |
  +---------------------------+
  1 row in set

  ```
 - 将数值 123 转换为 `CHAR` 类型。

  ```sql
  obclient> SELECT CAST(123 AS CHAR(2));
  +----------------------+
  | CAST(123 AS CHAR(2)) |
  +----------------------+
  | 12                   |
  +----------------------+
  1 row in set

  ```
 - 将数值 1 转换为 `CHAR` 类型并指定字符集。

  ```sql
  obclient> SELECT CAST(1 AS CHAR CHARACTER SET utf8mb4);
  +---------------------------------------+
  | CAST(1 AS CHAR CHARACTER SET utf8mb4) |
  +---------------------------------------+
  | 1                                     |
  +---------------------------------------+
  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) 咨询热线
