CAST()函数用于数据类型转换,语法为CAST(expression AS type);可将数值转字符串(char)、字符串转整数(SIGNED/UNSIGNED)、转浮点数(DECIMAL)或日期时间(date/DATETIME);常用于数据比较、聚合计算和union查询中的类型统一,需确保源数据可合法转换以避免错误。

在mysql中,CAST() 函数用于将一个数据类型转换为另一个数据类型。这个功能在查询过程中非常有用,尤其是在需要对不同类型的数据进行比较、计算或格式化输出时。
基本语法
CAST(expression AS type)
其中:
- expression:要转换的值或字段
- type:目标数据类型,如 CHAR、SIGNED、UNSIGNED、DECIMAL、DATE、DATETIME 等
常见用法示例
1. 转换为字符串(CHAR)
当你想把数值转成字符串以便拼接或其他文本操作时:
select CAST(123 AS CHAR); — 结果: ‘123’SELECT CONCAT(‘ID: ‘, CAST(id AS CHAR)) FROM users;
2. 转换为整数(SIGNED 或 UNSIGNED)
SELECT CAST(‘123’ AS SIGNED); — 结果: 123SELECT CAST(12.8 AS SIGNED); — 结果: 12
使用 UNSIGNED 可获得无符号整数(非负):
SELECT CAST(‘456’ AS UNSIGNED);
3. 转换为浮点数或定点数(DECIMAL)
处理精度要求较高的数值转换:
SELECT CAST(‘123.45’ AS DECIMAL(10,2)); — 结果: 123.45SELECT CAST(price_field AS DECIMAL(8,2)) FROM products;
4. 转换为日期时间类型
将字符串转换为 DATE 或 DATETIME 类型:
SELECT CAST(‘2025-04-05′ AS DATE); — 结果: ‘2025-04-05’SELECT CAST(‘2025-04-05 14:30:00’ AS DATETIME);
也可以将时间戳或数字转为日期(需注意格式):
SELECT CAST(‘20250405’ AS DATE); — 需符合可解析格式
实际应用场景
数据比较
当数据库中某个字段是字符串类型但存储的是数字,而你想按数值排序时:
SELECT * FROM table_name ORDER BY CAST(num_str_column AS SIGNED);
聚合计算
如果价格被错误地存为文本,可用 CAST 转换后求和:
SELECT SUM(CAST(price_text AS DECIMAL(10,2))) FROM sales;
联合查询(UNION)中的类型统一
确保多个 SELECT 的列类型一致:
SELECT CAST(id AS CHAR) FROM users
UNION
SELECT CAST(order_id AS CHAR) FROM orders;
基本上就这些。CAST 在日常查询中很实用,关键是选择合适的目标类型,并注意源数据是否能合法转换,否则会返回 NULL 或报错。不复杂但容易忽略细节。