SQL Server中CAST和CONVERT函数区别及用法详解

云舒
云舒
发布时间:2026-10-13 | 6人浏览过
原创

SQL Server中CAST和CONVERT均用于类型转换,核心区别在于功能侧重:CAST遵循ANSI标准,语法简洁通用;CONVERT提供额外的样式参数,特别适用于日期时间和货币的格式化输出。

核心区别概览

虽然两者都能实现数据类型的强制转换,但在实际开发中存在以下差异:

  • CAST函数:语法简单(CAST(expression AS type)),更符合ANSI SQL标准,跨数据库兼容性更好。适合基本的类型转换操作。
  • CONVERT函数:语法稍复杂(CONVERT(type, expression[, style])),独有的样式参数(style)使其在处理日期、时间和数值格式化方面表现优异,是SQL Server特有的扩展功能。

第1步:基础整数转换对比

对于简单的字符串或小数转整数操作,两者效果完全一致,但CAST写法更直观。

-- 字符串转整数
SELECT CAST('123' AS INT)   -- 结果: 123
SELECT CONVERT(INT, '123')  -- 结果: 123

-- 小数转整数(向下取整)
SELECT CAST(123.4 AS INT)   -- 结果: 123
SELECT CONVERT(INT, 123.4)  -- 结果: 123

-- 无效转换处理
SELECT CAST('123.4' AS INT) 
SELECT CONVERT(INT, '123.4')
-- 报错: Conversion failed when converting the varchar value '123.4' to data type int.

第2步:精度控制转换

当需要指定具体精度(如decimal的位数)时,两者语法略有不同,但均可精确控制结果。

-- 保留两位小数
SELECT CAST('123.4' AS DECIMAL(9,2))  -- 结果: 123.40
SELECT CONVERT(DECIMAL(9,2), '123.4') -- 结果: 123.40

第3步:利用CONVERT进行格式化(核心优势场景)

这是CONVERT函数的独有能力。在处理货币(money/decimal)或日期时,可以通过style参数直接生成特定格式的字符串,无需额外拼接。

DECLARE @Num MONEY = 1234.56

-- 无逗号,不补零(style 0)
SELECT CONVERT(VARCHAR(20), @Num, 0) -- 1234.56

-- 千位分隔符 + 两位小数(style 1)
SELECT CONVERT(VARCHAR(20), @Num, 1) -- 1,234.56

-- 千位分隔符 + 四位小数(style 2,常用于财务对账)
SELECT CONVERT(VARCHAR(20), @Num, 2) -- 1234.5600

选型建议总结

在选择使用哪个函数时,可参考以下原则:

  1. 追求兼容性:如果代码需要在MySQL、PostgreSQL等其他数据库中运行,优先选用 CAST。
  2. 需要格式化:如果目标是将日期转为特定显示格式(如“YYYY-MM-DD”)或货币添加千分位,必须使用 CONVERT 并配合 style 参数。
  3. 代码风格:在纯SQL Server环境中,若仅做基础类型切换,两者皆可,推荐统一团队规范以提高可读性。

以上就是SQL Server中CAST和CONVERT函数区别的详细内容,更多关于SQL Server类型转换技巧的资料请关注本站其它相关文章!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表