首页 > 代码库 > SQL Server 中CAST和Convert的区别
SQL Server 中CAST和Convert的区别
在 SQL Server 中Cast和Convert都是将表达式由一种数据类型转换为另一种数据类型。由于SQL Server提供两种功能,因此应该选择哪种功能或应该在哪种情况下使用该功能就很容易让人困惑了。CONVERT是专对SQL Server使用的,使日期与时间值,小数之间转换具有更宽的灵活性。CAST是两种功能中更具ANSI标准的功能,即虽然更具便携性(比如,使用CAST的函数能更容易的被其它数据库软件使用),但功能相对弱一些。不过,当小数转化为数值,并保留原始表达式中的小数数值时,仍然需要使用CAST。因此,我建议首先使用CAST,如果遇到必须使用CONVERT的情况时再使用CONVERT。
但并不是所有的转换操作CAST和Convert是等价的,下面我们来看下Cast和Convert的区别。
举个简单的例子,有Float转换成numeric(16,2)的类型
select cast(2014.0607 as numeric(16,2)) as CastValue
select cast(2.0140607E+3 as numeric(16,2)) as CastValue
用cast都可以转换成预期的2014.06。
select convert( numeric(16,2),2014.0607 ) as ConvertValue
可以转换成预期的2014.06。
select convert( numeric(16,2),2.0140607E+3 ) as ConvertValue
SQL Server 2012 之前版本运行的结果是 0.00
SQL Server 2012 是预期的2014.06。
* 这可能是微软已经发现并修复这个错误
结论
Convert只是显示转换,datetime 转 string时,可以指定格式,这个可以在MSDN查看http://msdn.microsoft.com/zh-cn/library/ms187928.aspx
Cast是强制转换,datetime 转 string时,不能指定格式。