Sql Server 2012 转换函数的比较(Cast、Convert和Parse)_MsSql

语法结构:

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

时间: 2024-11-03 21:13:54

Sql Server 2012 转换函数的比较(Cast、Convert和Parse)_MsSql的相关文章

Sql Server 2012 转换函数的比较(Cast、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

SQL Server 2012 开窗函数

废话不多说了,直接给大家贴代码了,具体代码如下所示: -- 开窗函数:在结果集的基础上进一步处理(聚合操作) -- Over函数,添加一个字段显示最大年龄 SELECT * , MAX(StuAge) OVER ( ) MaxStuAge FROM dbo.Student; -- Over函数,添加一个字段显示总人数 SELECT * , COUNT(StuID) OVER ( ) StuCount FROM dbo.Student; -- Partition By 分组统计数量 -- 根据性别

SQL SERVER 2012新增函数之逻辑函数IIF

前言 SQL SERVER 2012中新增了IIF函数,这个函数在VB或是ACCESS中是存在的.感兴趣的朋友们下面来一起学习学习吧. 格式如下 iif(布尔表达式,value1,value2) 也就是说如果表达式成立,那么就返回value1,如果不成立,就返回value2. 示例如下 例如: select iif(30>45,'对','错') as 结果 /* 结果 ---- 错 */ select iif(null=null,'对','错') as 结果 /* 结果 ---- 错 */ se

SQL Server实现split函数分割字符串功能及用法示例_MsSql

本文实例讲述了SQL Server实现split函数分割字符串功能及用法.分享给大家供大家参考,具体如下: /* 函数名称:f_SplitToNvarchar 作用:实现split功能的函数 更新记录: 设计思路:将nvarchar类型字符结合的一个串,分隔到一张只有一列nvarchar类型的表里 */ CREATE FUNCTION [dbo].[f_SplitToNvarchar] ( @SourceSql NVARCHAR(MAX),--源分隔字符串 @StrSeprate VARCHAR

SQL SERVER 2012新增函数之字符串函数FORMAT详解

前言 本文主要介绍的是使用 FORMAT函数将日期/时间和数字值格式化为识别区域设置的字符串.下面话不多说,来看详细的介绍吧. 格式如下: format(value,format,culture) 第一个参数是要格式化的值,第二个是格式,第三个是区域,比如是中国,还是美国,还是大不列颠等等. FORMAT 依赖于 .NET Framework公共语言运行时 (CLR) 的存在. declare @date datetime = '2014-01-01' select FORMAT( @date,

sql server 2012 数据库所有表里查找某字符串的方法_MsSql

复制代码 代码如下: USE [数据库名称];  --1.定义需要查找的关键字.在搜索中,使用模糊搜索:LIKE '%@key_find%' DECLARE @key_find NVARCHAR(MAX) = '123';--假设是找字符串"123"  --2.用游标Cursor_Table,遍历所有表 DECLARE Cursor_Table CURSOR FOR     SELECT name from sysobjects WHERE xtype = 'u' AND name &

SQL Server 2012 引入CONCAT函数

  Sql server 2012 加入了一些新的系统函数, 下边简单介绍一下CONCAT CONCAT 函数最多可以连接255个字符变量,当调用这个函数的时候需要至少接收两个参数,参数类型不一定是字符串类型,也可以是可以隐式转换为字符串的类型比如int ,float等类型.只要符合sql 2012的能隐式转换为字符串的规则即可,当我们想把两个值类型的数据连接起来的时候,不需要先将它们转为nvarchar然后再通过"+"来连接了 如果传入的参数为null,则会把它隐式转换为空字符串,如

《T-SQL性能调优秘笈——基于SQL Server 2012 窗口函数》——1.1 窗口函数的背景

1.1 窗口函数的背景 T-SQL性能调优秘笈--基于SQL Server 2012 窗口函数 在开始学习具体的窗口函数之前,先了解其背景和内涵,会对后续的学习有所帮助.本节先谈谈窗口函数的背景,解释基于集合方式和基于游标/迭代方式进行查询的不同,以及窗口函数如何对二者的差异进行弥补.最后,本节也提到了窗口函数的替代方法,以及为什么窗口函数会优于其替代方法.注意,尽管窗口函数能非常高效地解决很多问题,但在某些案例中,替代方法会好于窗口函数.第4章会具体谈论对窗口函数的优化,解释在什么情况下,计算

SQL Server 2005 MD5函数

原文:SQL Server 2005 MD5函数 在SQL Server 2005下自带的函数HashBytes() ,此函数是微软在SQL Server 2005中提供的,可以用来计算一个字符串的MD5和SHA1值,使用方法如下: --获取123456的MD5加密串 select hashbytes('MD5', '123456') ; --获取123456的SHA1加密串 select hashbytes('SHA1', '123456') ; 有了这个函数可以在SQL Server中为字符