SQL中的数据类型转换是日常查询开发里的高频操作,CAST和CONVERT函数作为实现该功能的核心工具,各自有不同的语法特性和适用场景,掌握两者的使用方法能有效解决很多数据处理的痛点问题。

CAST函数基础用法
CAST函数是SQL标准定义的数据类型转换函数,几乎所有主流的关系型数据库都支持该语法,通用性更强。它的基本语法结构如下:
-- CAST函数语法 CAST(表达式 AS 目标数据类型)
其中表达式可以是字段名、常量或者计算结果,目标数据类型需要是数据库支持的有效类型。下面是几个常见的使用示例:
-- 将字符串转为整数
SELECT CAST('123' AS INT) AS result;
-- 将数值转为字符串
SELECT CAST(456 AS VARCHAR(10)) AS result;
-- 将字符串转为日期类型
SELECT CAST('2024-05-20' AS DATE) AS result;
CONVERT函数基础用法
CONVERT函数是SQL Server等数据库特有的转换函数,相比CAST增加了样式参数,更适合处理日期、时间等需要指定格式的场景。它的基本语法结构如下:
-- CONVERT函数语法(以SQL Server为例) CONVERT(目标数据类型, 表达式 [, 样式])
样式参数是可选的,主要用于指定日期、时间、货币等类型的转换格式,不同样式对应不同的输出格式。下面是几个常见使用示例:
-- 将当前日期转为指定格式的字符串 SELECT CONVERT(VARCHAR(20), GETDATE(), 23) AS result; -- 输出格式为yyyy-MM-dd -- 将字符串转为日期类型 SELECT CONVERT(DATETIME, '2024-05-20 14:30:00', 120) AS result; -- 将数值转为带格式的字符串 SELECT CONVERT(VARCHAR(20), 12345.67, 1) AS result; -- 输出12,345.67
两者的核心差异对比
为了更清晰地区分两个函数的适用场景,我们可以从以下几个维度对比:
| 对比维度 | CAST函数 | CONVERT函数 |
|---|---|---|
| 通用性 | 符合SQL标准,多数数据库支持 | 主要为SQL Server特有,其他数据库支持度低 |
| 语法复杂度 | 语法简单,仅支持表达式和目标类型 | 支持可选样式参数,可指定转换格式 |
| 适用场景 | 通用类型转换,无特殊格式要求 | 日期、时间、货币等需要指定格式的场景 |
实际查询中的使用技巧
1. 数值计算前的类型转换
当字段存储的是字符串类型的数值,需要参与计算时,需要先转换为数值类型,避免计算错误:
-- 查询订单总价,price字段为VARCHAR类型 SELECT order_id, CAST(price AS DECIMAL(10,2)) * quantity AS total_price FROM order_table;
2. 日期格式的统一处理
如果需要将日期按照指定格式输出,在SQL Server环境下优先使用CONVERT函数:
-- 查询用户注册日期,输出yyyy年MM月dd日格式 SELECT user_id, CONVERT(VARCHAR(20), register_time, 111) AS register_date FROM user_table;
3. 跨数据库兼容的写法选择
如果项目需要兼容多种数据库,优先使用CAST函数,避免CONVERT带来的兼容性问题:
-- 通用写法,适配多数数据库 SELECT CAST(create_time AS VARCHAR(20)) AS create_time_str FROM log_table;
常见注意事项
- 转换时要确保源数据的内容符合目标类型的规则,比如将字符串
'abc'转为INT类型会直接报错。 - 转换数值类型时要指定合适的长度和精度,避免数据截断,比如
VARCHAR(5)无法存储长度超过5的字符串。 - 使用CONVERT的样式参数时,要确认数据库支持的样式编号,不同数据库的样式编号可能不通用。
- 如果转换可能失败,可以先使用
TRY_CAST或者TRY_CONVERT函数(SQL Server支持),避免查询直接中断。
-- 安全转换,转换失败返回NULL
SELECT TRY_CAST('abc' AS INT) AS result; -- 返回NULL,不会报错
SELECT TRY_CONVERT(INT, '123') AS result; -- 返回123