在SQL的实际使用中,不同数据类型的字段进行运算、比较或者拼接时,经常会因为类型不匹配导致报错或者结果不符合预期,这时候就需要用到类型转换函数。CAST和CONVERT是SQL标准以及主流数据库都支持的两个类型转换函数,二者都能完成数据类型的转换,但适用场景和语法略有不同。
CAST函数的基本用法
CAST是SQL标准定义的函数,语法相对简洁,通用性更强,几乎所有主流的关系型数据库都支持该函数的使用。它的核心作用是将一个表达式的值转换为指定的数据类型。
CAST函数语法
CAST函数的基本语法如下:
CAST ( expression AS target_data_type [ ( length ) ] )
其中expression是要转换的原始值或者字段,target_data_type是目标数据类型,部分数据类型可以指定长度,比如varchar类型可以指定字符长度。
CAST函数使用示例
下面通过几个常见的场景展示CAST函数的使用:
- 将字符串转换为整数类型
-- 将字符串'123'转换为整数类型
SELECT CAST('123' AS INT) AS result;
-- 输出结果:123
- 将数值转换为指定长度的字符串
-- 将数值456转换为长度为5的字符串,不足位补空格 SELECT CAST(456 AS VARCHAR(5)) AS result; -- 输出结果:' 456'
- 将日期转换为字符串类型
-- 将当前日期转换为yyyy-mm-dd格式的字符串 SELECT CAST(GETDATE() AS DATE) AS result; -- 输出结果类似:2024-05-20
CONVERT函数的基本用法
CONVERT函数是SQL Server中常用的类型转换函数,部分其他数据库也支持类似语法,相比CAST函数,它支持更多的转换选项,尤其是日期格式的转换可以指定样式码。
CONVERT函数语法
CONVERT函数的基本语法如下:
CONVERT ( target_data_type [ ( length ) ] , expression [ , style ] )
其中style是可选参数,主要用于日期和时间类型的转换,指定转换后的日期格式样式码。
CONVERT函数使用示例
下面展示CONVERT函数的常见使用场景:
- 基础类型转换
-- 将字符串'789'转换为整数 SELECT CONVERT(INT, '789') AS result; -- 输出结果:789
- 日期转换为指定格式的字符串
-- 将当前日期转换为yyyy年mm月dd日格式的字符串,样式码111对应yyyy/mm/dd,120对应yyyy-mm-dd hh:mi:ss
SELECT CONVERT(VARCHAR(20), GETDATE(), 111) AS result1,
CONVERT(VARCHAR(20), GETDATE(), 120) AS result2;
-- 输出结果类似:result1为2024/05/20,result2为2024-05-20 14:30:00
CAST与CONVERT的区别对比
二者虽然都能实现类型转换,但在使用上存在以下差异:
| 对比项 | CAST函数 | CONVERT函数 |
|---|---|---|
| 语法标准 | SQL标准语法,通用性更强 | 非SQL标准,主要在SQL Server中支持,部分数据库兼容 |
| 日期格式控制 | 无法直接指定日期转换样式,依赖数据库默认格式 | 可以通过style参数指定多种日期转换样式 |
| 语法简洁度 | 语法更简洁,参数更少 | 语法稍复杂,支持更多可选参数 |
使用注意事项
在使用这两个函数进行类型转换时,需要注意以下几点:
- 转换的原始值必须符合目标类型的格式要求,比如将字符串'abc'转换为整数会直接报错。
- 转换数值类型时,要注意目标类型的数值范围,避免溢出。
- 如果是在跨数据库的项目中开发,优先使用CAST函数,保证代码的通用性。
- 如果是在SQL Server中需要转换日期为特定格式,使用CONVERT函数会更方便。
当遇到类型转换失败时,可以先检查原始数据的格式是否符合目标类型的要求,也可以通过TRY_CAST或者TRY_CONVERT函数进行转换,这两个函数在转换失败时会返回NULL而不是报错,更适合处理可能存在异常数据的场景。
-- 转换失败时返回NULL,不会报错
SELECT TRY_CAST('abc' AS INT) AS result;
-- 输出结果:NULL