CONVERT 函数是 SQL Server 里面专门做数据类型转换的内置函数,核心作用就是把一种数据类型转换成另外一种指定的数据类型,最常用场景是把日期时间类型转成指定格式的字符串,也可以把数字,字符,小数之间互相转换,很多新手容易把 CONVERT 和 CAST 搞混,CAST 是标准 SQL 通用写法,语法更简单,但是 CONVERT 是 SQL Server 独有的函数,最大优势就是转换日期的时候可以指定 style 格式编号,灵活控制日期输出样式,在报表查询,数据清洗,导出数据的时候使用频率非常高,如果类型不兼容,执行 CONVERT 函数的时候会直接抛出转换报错,写语句的时候要提前判断源数据是否可以正常转换,避免整段查询失败。
CONVERT 函数基础语法
CONVERT 目标数据类型 长度 表达式 style
参数说明
目标数据类型,就是想要转换成的类型,比如 varchar int datetime decimal
长度,可选参数,字符类型的时候可以指定最大长度
表达式,需要被转换的原始值,可以是字段,常量,其他函数计算结果
style,可选参数,只有日期时间转字符串的时候使用,是数字编号,用来定义日期输出格式
常用日期 style 编号对照表
| style 编号 | 输出格式示例 |
|---|---|
| 101 | mm dd yyyy 月日年 |
| 102 | yy mm dd 年日月 |
| 103 | dd mm yyyy 日月年 |
| 112 | yyyymmdd 纯数字年月日 |
| 120 | yyyy mm dd hh mi ss 标准带时分秒格式 |
| 121 | yyyy mm dd hh mi ss 带毫秒格式 |
常见转换场景实操
1 日期转字符串
SELECT CONVERT varchar getdate 120
这条语句就是把当前系统时间,转换成 120 格式的文本字符串,报表导出经常使用这个写法
2 字符串转日期
SELECT CONVERT datetime 2026 11 12
把符合格式的文本,转换成 datetime 日期类型,方便后续日期比较计算
3 数字转字符串
SELECT CONVERT varchar 12345
把整型数字转为文本,用于拼接字符串
4 字符串转数字
SELECT CONVERT int 888
把纯数字文本转为 int 类型,用来做数值运算
5 小数类型转换
SELECT CONVERT decimal 18 2 123.456
把数值转为指定精度和小数位数的 decimal 类型
CONVERT 和 CAST 对比
| 对比项 | CONVERT | CAST |
|---|---|---|
| 所属数据库 | SQL Server 专属 | ANSI SQL 标准 |
| 日期格式控制 | 支持 style 编号自定义日期样式 | 不支持自定义日期格式 |
| 语法 | 带 style 可选参数 | CAST 表达式 AS 目标类型 |
| 跨库通用性 | 差 | 好 |
详细使用步骤
第一步,确认源数据类型和目标转换类型,判断两种类型是否兼容,比如字母文本不能直接转换成 int,强行使用 CONVERT 函数会报错。
第二步,书写 CONVERT 函数基础结构,填入目标类型,原始表达式,如果是日期转换,补充对应的 style 编号。
第三步,单独执行这条 SELECT 语句,查看返回结果,确认转换后的格式是否符合预期。
第四步,把写好的 CONVERT 函数嵌入到 WHERE 条件,GROUP BY,ORDER BY 或者报表字段里面,作为查询语句的一部分。
第五步,处理异常数据,如果源字段里面存在脏数据,转换报错,可以搭配 TRY_CONVERT 函数,转换失败的时候返回 null,不会中断整条查询。
使用注意要点
CONVERT 函数转换失败会直接报错,大批量数据清洗的时候,脏数据会导致整个查询语句执行失败,这个场景优先推荐 TRY_CONVERT。
style 编号只对日期时间转换生效,做数字字符转换的时候,填写 style 参数没有意义。
转换之后的数据类型会改变原有排序和比较规则,比如日期转成字符串之后,就不能直接使用日期函数做日期运算。
不同版本 SQL Server 对部分 style 编号支持保持一致,但是特殊世纪格式编号在新版数据库有细微变化。
【常见问题】
问题 1 SQL 之 CONVERT 函数可以在 MySQL 里面使用吗
回答 1 SQL 之 CONVERT 函数是 SQL Server 专属写法,MySQL 虽然也有 CONVERT,但是语法和用途不一样,MySQL 的 CONVERT 主要做字符集转换,不支持 SQL Server 里面日期 style 编号,不能直接照搬 SQL 之 CONVERT 函数的写法。
问题 2 SQL 之 CONVERT 函数转换报错是什么原因
回答 1 SQL 之 CONVERT 函数转换报错,一般是源数据和目标类型不兼容,比如带汉字的文本转 int,或者日期文本格式和识别格式不匹配,使用 SQL 之 CONVERT 函数前,需要检查源字段里面的脏数据。
问题 3 SQL 之 CONVERT 函数和 TRY_CONVERT 有什么区别
回答 1 SQL 之 CONVERT 函数转换失败会直接抛出错误中断查询,TRY_CONVERT 是增强版本,转换失败返回 null,不会报错,处理大批量脏数据的时候,优先选择 TRY_CONVERT,日常干净数据场景继续使用 SQL 之 CONVERT 函数。
【免责申明】
本内容基于 SQL Server 数据库公开语法整理,不同版本 SQL Server 对 CONVERT 函数支持细节存在差异,详细参数和 style 编号请参考微软官方文档,本内容仅作为 SQL 学习参考,不代表生产环境最优方案。


