📣

TiDB Cloud Serverless 现已更名为
Starter
!此页面由 AI 自动翻译,英文原文请见
此处。

Cast Functions and Operators

Cast 函数和操作符可以实现值从一种数据类型到另一种数据类型的转换。 TiDB 支持所有在 MySQL 8.0 中可用的 cast 函数和操作符

名称描述
BINARY将字符串转换为二进制字符串
CAST()将值转换为特定类型
CONVERT()将值转换为特定类型

BINARY

BINARY 操作符自 MySQL 8.0.27 版本起已被弃用。建议在 TiDB 和 MySQL 中使用 CAST(... AS BINARY) 代替。

CAST

CAST(<expression> AS <type> [ARRAY]) 函数用于将表达式转换为特定类型。

该函数也用于创建 多值索引

支持的类型如下:

类型描述是否可用于多值索引
BINARY(n)二进制字符串
CHAR(n)字符串是,但仅在指定长度时有效
DATE日期
DATETIME(fsp)日期/时间,fsp 为可选
DECIMAL(n, m)十进制数,nm 为可选,默认为 100
DOUBLE双精度浮点数
FLOAT(n)浮点数,n 为可选,范围在 053 之间
JSONJSON
REAL浮点数
SIGNED [INTEGER]有符号整数
TIME(fsp)时间
UNSIGNED [INTEGER]无符号整数
VECTOR向量
YEAR年份

示例:

以下语句将十六进制字面量的二进制字符串转换为 CHAR

SELECT CAST(0x54694442 AS CHAR);
+--------------------------+ | CAST(0x54694442 AS CHAR) | +--------------------------+ | TiDB | +--------------------------+ 1 行,耗时 0.0002

以下语句将从 JSON 列中提取的 a 属性的值转换为无符号数组。注意,转换为数组仅作为多值索引定义的一部分被支持。

CREATE TABLE t ( id INT PRIMARY KEY, j JSON, INDEX idx_a ((CAST(j->'$.a' AS UNSIGNED ARRAY))) ); INSERT INTO t VALUES (1, JSON_OBJECT('a',JSON_ARRAY(1,2,3))); INSERT INTO t VALUES (2, JSON_OBJECT('a',JSON_ARRAY(4,5,6))); INSERT INTO t VALUES (3, JSON_OBJECT('a',JSON_ARRAY(7,8,9))); ANALYZE TABLE t;
EXPLAIN SELECT * FROM t WHERE 1 MEMBER OF(j->'$.a')\G *************************** 1.*************************** id: IndexMerge_10 estRows: 2.00 task: root 访问对象: 操作符信息: type: union *************************** 2.*************************** id: ├─IndexRangeScan_8(Build) estRows: 2.00 task: cop[tikv] 访问对象: table:t, index:idx_a(cast(json_extract(`j`, _utf8mb4'$.a') as unsigned array)) 操作符信息: range:[1,1], keep order:false, stats:partial[j:unInitialized] *************************** 3.*************************** id: └─TableRowIDScan_9(Probe) estRows: 2.00 task: cop[tikv] 访问对象: table:t 操作符信息: keep order:false, stats:partial[j:unInitialized] 3 行,耗时 0.00

CONVERT

CONVERT() 函数用于在 字符集 之间进行转换。

示例:

SELECT CONVERT(0x616263 USING utf8mb4);
+---------------------------------+ | CONVERT(0x616263 USING utf8mb4) | +---------------------------------+ | abc | +---------------------------------+ 1 行,耗时 0.0004

MySQL 兼容性

  • TiDB 不支持对 SPATIAL 类型的 cast 操作。更多信息请参见 #6347
  • TiDB 不支持 CAST() 中的 AT TIME ZONE。更多信息请参见 #51742
  • CAST(24 AS YEAR) 在 TiDB 中返回 2 位数字,在 MySQL 中返回 4 位数字。更多信息请参见 #29629

文档内容是否有帮助?