标签:
在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 */
例子:
--转换失败 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
--函数直接报错,是因为函数的写法有问题 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
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 */
【Transact-SQL】SQL Server 2012新功能之一:转换函数
标签:
原文地址:http://blog.csdn.net/sqlserverdiscovery/article/details/42240253