【Transact-SQL】SQL Server 2012新功能之一:转换函数

在SQL Server 2012中,新增了几个转换函数,用于支持数据类型的强制转化。

由于之前主要用的是SQL Server 2008R2,而公司的项目为了提高开发效率,很多表的列都为varchar类型,但也会存储数字。

当对这些列进行聚合计算,比如sum时,要先进行cast转换为numeric类型,经常会报错,现在有了这些新的函数,可以先try一下,通过判断返回值是否为null,我们可以判断字段值是否为数字,如果不是数字,就直接过滤到,所以这些函数非常实用,希望对大家有用。

1、PARSE函数

语法:PARSE ( string_value AS data_type [ USING culture ] )

参数:

string_value:nvarchar (4000) 值,表示要解析为指定数据类型的格式化值。

string_value:必须为所请求的数据类型的表示形式,否则 PARSE 将引发错误。

data_type    :表示结果的所请求数据类型的文本值。

culture         :可选字符串,它标识对 string_value 进行格式化的区域性。

如果未提供 culture 参数,则使用当前会话的语言。 可以使用 SET LANGUAGE 语句隐式或显式设置                          此语言。 culture 接受 .NET Framework 支持的任何区域性;它不局限于 SQL Server 显式支持的语              
             言。 如果culture 参数无效,PARSE 将引发错误。

例子:

--解析为 日期
SELECT PARSE('2010年10月11日' AS datetime2 USING 'zh-CN')
/*
2010-10-11 00:00:00.0000000
*/

--解析为 美元
SELECT PARSE('$345.98' AS money USING 'en-US')
/*
345.98
*/

--先设置要进行格式化的区域性,然后解析为 日期
SET LANGUAGE '简体中文';
SELECT PARSE('2010年10月11日' AS datetime)
/*
2010-10-11 00:00:00.000
*/

2、TRY_CAST函数

返回转换为指定数据类型的值(如果转换成功);否则返回 Null。

可以用来判断指定值是否能转化为相应的数据类型,间接就可以知道值是什么数据类型。

语法:TRY_CAST ( expression AS data_type [ ( length ) ] )

参数:

expression:要转换的值。 任何有效的表达式。

data_type :要将 expression 转换到的数据类型。

length       :指定目标数据类型长度的可选整数。可接受值的范围由 data_type 的值确定。

例子:

--转换失败
SELECT
    CASE WHEN TRY_CAST('.' AS numeric(10,2)) IS NULL
              THEN '转换失败'
		 ELSE '转换成功'
	END

--转换成功
SELECT
    CASE WHEN TRY_CAST('1' AS numeric(10,2)) IS NULL
              THEN '转换失败'
          ELSE '转换成功'
    END

3、TRY_CONVERT函数

返回转换为指定数据类型的值(如果转换成功);否则返回 Null。

可以用来判断指定值是否能转化为相应的数据类型,间接就可以知道值是什么数据类型。

语法:TRY_CONVERT ( data_type [ ( length ) ], expression [, style ] )

参数:

data_type [ ( length ) ]:要将 expression 转换到的数据类型。

expression                  :  要转换的值。

style                            :一个可选的整数表达式,指定 TRY_CONVERT 函数如何转换 expression。style 接受与 CONVERT 函数的 style 参数相同的值。 可接受值的范围由 data_type 的值确定。 如果 style为 null,则TRY_CONVERT 返回 null。

例子:

--函数直接报错,是因为函数的写法有问题
SELECT
    CASE WHEN TRY_CONVERT(xml, 4) IS NULL
              THEN '转换失败'
          ELSE '转换成功'
    END
/*
消息 529,级别 16,状态 2,第 2 行
不允许从数据类型 int 到 xml 的显式转换。
*/
--转换失败
SELECT
    CASE WHEN TRY_CONVERT(float, 'a') IS NULL
              THEN '转换失败'
          ELSE '转换成功'
    END

--转换成功
SELECT
    CASE WHEN TRY_CONVERT(datetime, '20141201 13:12:11') IS NULL
              THEN '转换失败'
         ELSE CONVERT(datetime, '20141201 13:12:11')   --转换成功
    END

SELECT
    CASE WHEN TRY_CONVERT(numeric(10,2),'1') IS NULL
              THEN '转换失败'
         ELSE CONVERT(numeric(10,2),'1')
     END

4、TRY_PARSE函数

在 SQL Server 2012 中,返回表达式的结果(已转换为请求的数据类型);如果强制转换失败,则返回 Null。

TRY_PARSE 仅用于从字符串转换为日期/时间和数字类型。

语法:TRY_PARSE ( string_value AS data_type [ USING culture ] )

参数:

string_value:nvarchar(4000) 值,表示要解析为指定数据类型的格式化值。

string_value:必须为所请求的数据类型的有效表示形式,否则 TRY_PARSE 将返回 Null。

data_type    :表示结果的所请求数据类型的文本。

culture:    可选字符串,它标识对 string_value 进行格式化的区域性。

如果未提供 culture 参数,则使用当前会话的语言。 可以使用 SET LANGUAGE 语句隐式或显式设置此语言。 culture 接受 .NET Framework 支持的任何区域性;它不局限于 SQL Server 显式支持的语言。 如果culture 参数无效,PARSE 将引发错误。

例子:

SELECT
    CASE WHEN PARSE('2010年10月11日' AS datetime2 USING 'zh-CN') IS NULL
              THEN '失败'
         ELSE '成功'
    END '转化结果',
	PARSE('2010年10月11日' AS datetime2 USING 'zh-CN') '转化后的值'
/*
转化结果	转化后的值
成功	2010-10-11 00:00:00.0000000
*/
时间: 2024-10-26 20:00:02

【Transact-SQL】SQL Server 2012新功能之一:转换函数的相关文章

SQL Server 2012 新的分页函数 OFFSET & FETCH NEXT

DECLARE @page INT, @size INT;select @page = 300, @size = 10 SELECT *FROM gpcomp1.GPCUSTWHERE company like 'a%'ORDER BY CUSTNOOFFSET (@page -1) * @size ROWSFETCH NEXT @size ROWS ONLY; SQL Server 2012 新的分页函数 OFFSET & FETCH NEXT,布布扣,bubuko.com

SQL Server 2014新功能 -- 内存中OLTP(In-Memory OLTP)

SQL Server 2014新功能 -- 内存中OLTP(In-Memory OLTP) 概述 内存中OLTP(项目"Hekaton")是一个全新的.完全集成到SQL Server的数据库引擎组件. 对OLTP工作负载访问中在内存中的数据进行了优化.内存中OLTP能够帮助OLTP工作负载实现显著的性能改善,并减少处理时间.表能被视为"内存优化",提升内存中的OLTP功能.内存优化表是完全可事务的.并可以使用Transact-SQL进行访问.Transact-SQL

Exchange Server 2016新功能概览

微软计划在5月第一周即将举行的Ignite大会上首次预览Exchange Server 2016,Ignite大会将于5月4--8日期间在芝加哥举行.目前得知Exchange Server 2016新功能如下: 1.一个文档协同的新方法,使得发送链接和协同变得十分轻松,而不会遇到附件的版本问题 2.更快速且更智能的搜索,帮助用户快速在他们的邮箱和日历中找到他们所需的东西 3.对电子发现搜索性能和可靠性的重大更新 4.更好的扩展性,包括新的基于REST的API,针对Mail.Calendar以及C

SQL Server提供更为灵活的转换函数FORMAT。

CONVERT函数的style是数字,记忆起来比较困难,只能按照系统定义的格式来显示,不够灵活.SQL Server提供更为灵活的转换函数FORMAT. 2,FORMAT函数,控制日期和时间类型的显示格式 FORMAT函数主要用于格式化显示date/time类型和数值类型,参数format用于指定显示的格式,给予用户对格式更自由地控制,culture参数是可选的,用于指定显示的语言,该函数返回值的数据类型是NVARCHAR,如果格式转换失败,该函数返回NULL: FORMAT ( value,

Windows Server 2016 新功能HCI(超融合基础架构) By S2D

超融合基础架构(Hyper-Converged Infrastructure,或简称"HCI")也被称为超融合架构,是指在同一套单元设备(x86服务器)中不仅仅具备计算.网络.存储和服务器虚拟化等资源和技术,而且还包括缓存加速.重复数据删除.在线数据压缩.备份软件.快照技术等元素,而多节点可以通过网络聚合起来,实现模块化的无缝横向扩展(scale-out),形成统一的资源池.超融合架构(Hyperconvergence Infrastructure, HCI)将虚拟化计算和存储整合到同

insert into values 插入多条指定记录 - sql server 2008新功能

之前碰到一条如下语句 declare @t1 table (catId int, id int) insert into @t1(catid,id) values (15,33), (15,49), (15,113) sql server 2000及2005上跑,均报错--Line 3: Incorrect syntax near ','. 后来查了一下,这是sql server2008出来的新特性.所以此语句仅限于sql server 2008及以上版本使用. PS:顺道提一下,sql ser

SQL Server 2012 新特性:新增和修改函数

转换函数      1.PARSE Parse是把字符串类型转化为想要的类型,看看和convert和cast的区别 SELECT PARSE ('2.111111' AS float ),CAST ('2.111111111111' AS FLOAT) ---------------------- ---------------------- 2.111111               2.111111111111 (1 row (s ) affected ) SELECT PARSE ('1

WSS存储服务器(Windows Storage Server) 2012新功能解析

虽然最近一段时间有关微软的新闻大多数集中在Windows 8以及Surface平板设备身上,但数周之前Windows Server 2012新版本中所包含的Windows Storage Server 2012同样值得我们关注.这款产品分类两个版本,工作组版与标准版.工作组版本主要针对小型用户群组,授权许可中将其业务连接数量上限设置为250个.它同时也对底层硬件做出限制,要求用户使用单CPU插槽.最高32GB内存及最多六块磁盘驱动器. 其标准版则在功能与特性方面与Windows Server 2

[精讲8] windows server 2012 Cluster功能

1-Cluster概念 群集-就是通过一组计算机提供某一个服务 特点1: 在windows server 中,只有enterprise和datacenter 版本可以提供cluster,在 2003中,最多支持8个节点,在2008 / 2008 R2 /2012中最多支持16个节点 特点2:cluster实现必须需要AD架构 特点3:至少三块网卡 ,SAN,Public,Private 特点4:cluster在实现的时候有2种模式 A/P (active passive)和A/A模式 特点5cl