MySQL CAST() 函数使用指南
MySQL CAST() 函数将任意类型的参数值转为指定的类型的值并返回。
CAST() 语法
这里是 MySQL CAST() 函数的语法:
CAST(expr AS data_type)
CAST(expr AS data_type) 等同于 CONVERT(expr, type)。
参数
-
expr必需的。 一个需要转换数据类型的值。
-
data_type必需的。 目标数据类型。您可以使用下面的类型:
-
BINARY[(N)]: 如果参数为空(0 长度),结果是BINARY(0),否则结果是VARBINARY类型的字符串。 -
CHAR[(N)]: 结果是VARCHAR类型的字符串。除非参数为空,结果是CHAR(0)。 -
DATE: 结果是DATE类型的。 -
DATETIME[(M)]: 结果是DATETIME类型的,M是小数秒的位数。 -
DECIMAL[(M[,D])]: 结果是DECIMAL类型的。 -
DOUBLE: 结果是DOUBLE类型的。它在 MySQL 8.0.17 添加。 -
FLOAT[(p)]: 按如下规则转换数据类型- 如果没有指定
p,结果是FLOAT类型的。 - 如果
0 <= p <= 24,结果是FLOAT类型的。 - 如果
25 <= p <= 53,结果是DOUBLE类型的。 - 如果
p < 0或p > 53,返回一个错误。
- 如果没有指定
-
JSON: 结果是JSON类型的。 -
NCHAR[(N)]: 结果是NCHAR类型的。 -
REAL: 结果是REAL类型的。实际上,如果启用了REAL_AS_FLOAT它是FLOAT,否则是DOUBLE。 -
SIGNED [INTEGER]: 结果是一个有符号的BIGINT类型。 -
TIME[(M)]: 结果是TIME类型的,M是小数秒的位数。 -
UNSIGNED [INTEGER]: 结果是一个无符号的BIGINT类型。 -
YEAR: 结果是YEAR类型的,它在 MySQL 8.0.22 添加。
-
返回值
MySQL CAST() 函数将任意数据类型的值转为指定的数据类型并返回。
CAST() 示例
这里有几个 CAST() 的常用示例
转为二进制
您可以是用 CAST() 函数将一个字符串转为二进制字符串。
SELECT CAST('hello' AS BINARY);
+--------------------------------------------------+
| CAST('hello' AS BINARY) |
+--------------------------------------------------+
| 0x68656C6C6F |
+--------------------------------------------------+注意, 在 mysql client 中,二进制字符串默认以十六进制的形式打印出来。
您也可以使用 BINARY 操作符获取一个字符串的二进制字符串。如下:
SELECT BINARY 'hello';
+--------------------------------+
| BINARY 'hello' |
+--------------------------------+
| 0x68656C6C6F |
+--------------------------------+转为 JSON
您可以使用 CAST() 函数将使用字符串表示的 JSON 文档转为 JSON 类型的数据。
SELECT CAST('[1, 2, "a"]' AS JSON);
+-----------------------------+
| CAST('[1, 2, "a"]' AS JSON) |
+-----------------------------+
| [1, 2, "a"] |
+-----------------------------+转为日期时间
您可以使用 CAST() 函数将使用字符串表示的日期/时间值转为 DATE, DATETIME 类型的数据。
SELECT
CAST('2022-02-28' AS DATE),
CAST('10:10:10' AS TIME),
CAST('2022-02-28 10:10:10' AS DATETIME);
+----------------------------+--------------------------+-----------------------------------------+
| CAST('2022-02-28' AS DATE) | CAST('10:10:10' AS TIME) | CAST('2022-02-28 10:10:10' AS DATETIME) |
+----------------------------+--------------------------+-----------------------------------------+
| 2022-02-28 | 10:10:10 | 2022-02-28 10:10:10 |
+----------------------------+--------------------------+-----------------------------------------+