在MySQL中,CAST 和 CONVERT 函数用于数据类型的转换。它们可以帮助你在查询过程中将一种数据类型转为另一种,比如把字符串转为数字、日期转为字符串等。虽然功能相似,但语法略有不同。
CAST函数的使用方法
CAST(expr AS type) 是标准SQL语法,兼容性较好。
expr:要转换的值或表达式 type:目标数据类型,如 CHAR、SIGNED、UNSIGNED、DECIMAL、DATE、DATETIME、TIME 等常见用法示例:
将字符串转为整数:
SELECT CAST('123' AS SIGNED);将数字转为字符串:
SELECT CAST(456 AS CHAR);将时间戳字符串转为 DATETIME 类型:
SELECT CAST('2023-10-01 12:30:00' AS DATETIME);CONVERT函数的使用方法
CONVERT 支持两种形式:
CONVERT(expr, type) —— 更像MySQL风格 CONVERT(expr USING charset) —— 用于字符集转换前一种与 CAST 功能基本一致:
SELECT CONVERT('789', SIGNED);SELECT CONVERT(123.45, CHAR);
也可以用于日期转换:
SELECT CONVERT('2023-12-25', DATE);CONVERT 还能处理字符集转换:
SELECT CONVERT('文本' USING utf8mb4);常用数据类型说明
CHAR:转换为字符串 SIGNED:转换为带符号整数(INT) UNSIGNED:转换为无符号整数 DECIMAL(M,D):转换为定点数,如 DECIMAL(10,2) DATE:仅日期部分 DATETIME:日期和时间 TIME:时间间隔或时间点实际应用场景
当你需要对字符串存储的数字进行排序或计算时,类型转换就很有用。
例如,表中 price 字段是 VARCHAR 类型,但想按数值排序:
SELECT * FROM products ORDER BY CAST(price AS DECIMAL(10,2));或者比较两个不同类型字段:
SELECT * FROM logs WHERE CAST(log_time AS DATE) = '2023-09-01';基本上就这些。CAST 更符合标准SQL,适合跨数据库兼容;CONVERT 在MySQL中更灵活,尤其支持字符集操作。两者在大多数场景可以互换使用。关键是根据字段类型选择正确的目标类型,避免转换失败。
