zoukankan      html  css  js  c++  java
  • Sql Server 2012 转换函数的比较(Cast、Convert 和 Parse)

    Cast、Convert 和 Parse 都是 Sql Server 2012 中的内置转换函数,其作用是:一种数据类型转换为另一种数据类型。其中前两者的差别较小,但   Parse 为  Sql Server 2012 新增函数,也是最近在分析  Sql Server 2012 新特性的时间,才有想把这3个函数拿出来进行比较分析的想法。

     
    语法结构:
     
    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 本人并没有找到太多的优势和应用场景,或者由于本人才疏学浅,找不到更好的,有懂得,请赐教
     
     
     
     


  • 相关阅读:
    MongoDB 之 手把手教你增删改查 MongoDB
    MongoDB 之 你得知道MongoDB是个什么鬼 MongoDB
    全栈12期的崛起之捡点儿有用的说说
    Python 常用模块
    Python3中的内置函数
    Python程序员之面试必回习题
    Django之初始庐山真面目
    Django之ORM操作
    MySQL-索引
    MySQL-函数
  • 原文地址:https://www.cnblogs.com/xunziji/p/2599397.html
Copyright © 2011-2022 走看看