SQL 类型转换 CAST
学习CAST/CONVERT · 难度:进阶 · +15XP
SQL 类型转换 CAST
在数据库操作中,经常需要将一个数据类型的值转换为另一种类型。例如,将数字字符串 '123' 转换为整数参与计算,或者将整数转换为字符串进行拼接。SQL 通过 CAST 函数和 CONVERT 函数提供了类型转换的能力。正确的类型转换可以避免隐式转换带来的性能问题和意外错误,是编写健壮 SQL 的重要技能。
CAST 基本语法
-- ANSI SQL 标准语法
CAST(表达式 AS 目标类型)
-- 部分数据库的 CONVERT 语法
CONVERT(目标类型, 表达式)
常见类型转换示例
-- 整数转字符串
SELECT CAST(score AS TEXT) FROM students;
-- 结果: "85", "92", "78" (字符串格式)
-- 字符串转整数
SELECT CAST('123' AS INTEGER) + 10;
-- 结果: 133
-- 整数转浮点数
SELECT CAST(score AS REAL) FROM students;
-- 结果: 85.0, 92.0, 78.0
-- 日期字符串转日期类型
SELECT CAST('2024-01-15' AS DATE);
-- PostgreSQL: 转换为DATE类型
类型转换的实际应用
以下是业务开发中常见的转换场景:
-- 1. 字符串拼接(需将数字转为文本)
SELECT name || '的分数是' || CAST(score AS TEXT) FROM students;
-- 结果: "张三的分数是85"
-- 2. 聚合计算时处理字符串存储的数字
SELECT SUM(CAST(price AS DECIMAL(10,2))) FROM orders;
-- 3. 比较时确保类型一致
SELECT * FROM products WHERE CAST(stock AS INTEGER) > 0;
其他类型转换函数
| 函数 | 功能 | 示例 |
|---|---|---|
| CAST(x AS type) | 通用类型转换(SQL标准) | CAST(score AS TEXT) |
| COALESCE(val, default) | 返回第一个非NULL值 | COALESCE(score, 0) |
| IFNULL(val, default) | MySQL中NULL替换 | IFNULL(score, 0) |
| ROUND(val, n) | 四舍五入保留n位小数 | ROUND(92.567, 1) = 92.6 |
| || 或 CONCAT | 字符串拼接(自动转换) | score || '分' |
隐式转换 vs 显式转换
- 显式转换:使用 CAST/CONVERT 明确指定,代码可读性高,行为可预测
- 隐式转换:数据库自动完成,虽然省事但可能导致意外结果
- 建议:关键业务逻辑中始终使用显式转换,避免依赖隐式行为
- 性能影响:隐式转换可能导致索引失效(如字符串列与整数比较时)
实战任务
- 将 score 列转换为文本后与字符串拼接
- 将字符串 '456' 转为整数后与 100 相加
- 使用 COALESCE 将 NULL 分数替换为 0