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 < 0p > 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                     |
+----------------------------+--------------------------+-----------------------------------------+