Sql Server 2012 转换函数的比较(Cast、Convert和Parse)
程序员文章站
2023-12-13 16:33:46
语法结构: 1. cast 语法结构:cast ( expression as data_type [ ( length ) ] ) 2. convert 语法结构:con...
语法结构:
1. cast
语法结构:cast ( expression as data_type [ ( length ) ] )
2. convert
语法结构:convert ( data_type [ ( length ) ] , expression [ , style ] )
3. parse
语法结构:parse ( string_value as data_type [ using culture ] )
其中,parse 为 sql server 的新特性 expression 必须要为被转换类型的字符串形式
性能分析:
总结:
1. convert 和 cast 的区别
convert是专对sql server使用的,使日期与时间值,小数之间转换具有更宽的灵活性。
cast是两种功能中更具ansi标准的功能,即虽然更具便携性(比如,使用cast的函数能更容易的被其它数据库软件使用),但功能相对弱一些。不过,当小数转化为数值,并保留原始表达式中的小数数值时,仍然需要使用cast
2. convert 和 parse 的区别
两者除了语法的区别,就是功能上面的区别,convert 功能更强大,parse 则为 sql server 2012 新增的功能,同时功能弱小很多的,只能将 字符串 转换为 数字类型 或者 日期类型,因为数字类型 或 日期类型长度都很小的,所以 parse 所带来的性能几乎不可能有大的改变的,之后我也做了大量的比较,发现 parse 是在绝大多数情况下都是可以替代的
3. 综合比较
a. 如果 是做针对 sql server 的做开发,建议只用 convert 方法
b. 如果考虑语句跨平台,则尽量用 cast,如 sql 语句既能在 sql server 上执行,又能在 mysql 上面执行
c. parse 在 sql server 2012 中就是一个鸡肋,经过1 下午的实战研究和翻阅msdn,都没有找到它的优势,如果比语法,cast 的语法结构和它一样,如果比功能,又太弱小,完全不能和cast 和 convert 做比较,所以,您就把 parse 忘记掉吧
性能分析所做的实验:
1. convert 和 parse 转换为字符串的比较
dbcc freeproccache
set statistics profile on
select top 1 parse(name as bigint) from test_parse
select top 1 convert(bigint,name) from test_parse
其中 name 为 nvarchar(1000) 的一个一段,值为:1231238912378912128
执行过之后,会发现,两者的执行计划完全相同,无论是对 cpu 的消耗,还是对 io的消耗,没有任何性能差别
2. money 和 datetime 类型的转换比较
-- datetime
dbcc freeproccache
declare @date varchar(100) = '2012/07/19 14:57:09.760'
select convert(datetime,@date) as date
select parse(@date as datetime using 'zh-cn') as date
--money
select parse('€345,98' as money using 'de-de') as result
select convert(money,'€345,98',1) as result
3. parse 的专利,字符型日期到 datetime 的转换
select parse('monday, 13 december 2010' as datetime2 using 'en-us') as result
select parse('monday, 13 december 2010' as datetime2 using 'zh-cn') as result
-- cast 和 convert 对这种类型的字符串都是不支持的
--select cast('monday, 13 december 2010' as datetime2) as result
--select convert(datetime,'monday, 13 december 2010') as result
在性能方面同样没什么区别,但是比较功能时,parse 却要比 convert 错太多
严重怀疑, parse 本人并没有找到太多的优势和应用场景,或者由于本人才疏学浅,找不到更好的,有懂得,请赐教
1. cast
语法结构:cast ( expression as data_type [ ( length ) ] )
2. convert
语法结构:convert ( data_type [ ( length ) ] , expression [ , style ] )
3. parse
语法结构:parse ( string_value as data_type [ using culture ] )
其中,parse 为 sql server 的新特性 expression 必须要为被转换类型的字符串形式
性能分析:
总结:
1. convert 和 cast 的区别
convert是专对sql server使用的,使日期与时间值,小数之间转换具有更宽的灵活性。
cast是两种功能中更具ansi标准的功能,即虽然更具便携性(比如,使用cast的函数能更容易的被其它数据库软件使用),但功能相对弱一些。不过,当小数转化为数值,并保留原始表达式中的小数数值时,仍然需要使用cast
2. convert 和 parse 的区别
两者除了语法的区别,就是功能上面的区别,convert 功能更强大,parse 则为 sql server 2012 新增的功能,同时功能弱小很多的,只能将 字符串 转换为 数字类型 或者 日期类型,因为数字类型 或 日期类型长度都很小的,所以 parse 所带来的性能几乎不可能有大的改变的,之后我也做了大量的比较,发现 parse 是在绝大多数情况下都是可以替代的
3. 综合比较
a. 如果 是做针对 sql server 的做开发,建议只用 convert 方法
b. 如果考虑语句跨平台,则尽量用 cast,如 sql 语句既能在 sql server 上执行,又能在 mysql 上面执行
c. parse 在 sql server 2012 中就是一个鸡肋,经过1 下午的实战研究和翻阅msdn,都没有找到它的优势,如果比语法,cast 的语法结构和它一样,如果比功能,又太弱小,完全不能和cast 和 convert 做比较,所以,您就把 parse 忘记掉吧
性能分析所做的实验:
1. convert 和 parse 转换为字符串的比较
复制代码 代码如下:
dbcc freeproccache
set statistics profile on
select top 1 parse(name as bigint) from test_parse
select top 1 convert(bigint,name) from test_parse
其中 name 为 nvarchar(1000) 的一个一段,值为:1231238912378912128
执行过之后,会发现,两者的执行计划完全相同,无论是对 cpu 的消耗,还是对 io的消耗,没有任何性能差别
2. money 和 datetime 类型的转换比较
复制代码 代码如下:
-- datetime
dbcc freeproccache
declare @date varchar(100) = '2012/07/19 14:57:09.760'
select convert(datetime,@date) as date
select parse(@date as datetime using 'zh-cn') as date
--money
select parse('€345,98' as money using 'de-de') as result
select convert(money,'€345,98',1) as result
3. parse 的专利,字符型日期到 datetime 的转换
复制代码 代码如下:
select parse('monday, 13 december 2010' as datetime2 using 'en-us') as result
select parse('monday, 13 december 2010' as datetime2 using 'zh-cn') as result
-- cast 和 convert 对这种类型的字符串都是不支持的
--select cast('monday, 13 december 2010' as datetime2) as result
--select convert(datetime,'monday, 13 december 2010') as result
在性能方面同样没什么区别,但是比较功能时,parse 却要比 convert 错太多
严重怀疑, parse 本人并没有找到太多的优势和应用场景,或者由于本人才疏学浅,找不到更好的,有懂得,请赐教