📣
TiDB Cloud Essential 开放公测中。此页面由 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

文档内容是否有帮助?