本系列关于SQL Server 2012 T-SQL技巧的文章共分四部分,由SQL Server专家Robert Sheldon提供。第一部分讲的是“数据值的乐趣”,第二部分介绍的是“T-SQL函数”。 TRY_CONVERT函数 新函数“TRY_CONVERT”支持对转换操作进行测试判断。该函数的用法与“TRY_PARSE”类似,如果出错是会返回“NULL”值,而不是报错。
我们来看几个例子,了解一下如何使用这个函数。 下面的“SELECT”语句使用“CONVERT”函数转换字符串“books”为“VARCHAR”数据类型: SELECT CONVERT(VARCHA……
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
本系列关于SQL Server 2012 T-SQL技巧的文章共分四部分,由SQL Server专家Robert Sheldon提供。第一部分讲的是“数据值的乐趣”,第二部分介绍的是“T-SQL函数”。
TRY_CONVERT函数
新函数“TRY_CONVERT”支持对转换操作进行测试判断。该函数的用法与“TRY_PARSE”类似,如果出错是会返回“NULL”值,而不是报错。我们来看几个例子,了解一下如何使用这个函数。
下面的“SELECT”语句使用“CONVERT”函数转换字符串“books”为“VARCHAR”数据类型:
SELECT CONVERT(VARCHAR(5), 'books'); |
如您所见,“SELECT”语句返回“books”,这表示转换是成功的。在下一个例子中“SELECT”语句尝试执行相同的转换,使用“TRY_CONVERT”函数:
SELECT TRY_CONVERT(VARCHAR(5), 'books'); |
同样,由于转换可以执行,所以“SELECT”语句仍然返回“books”。但是,如果我们想把单词“books”转换为“INT”数据类型,如下面的例子所示,看看会返回什么:
SELECT CONVERT(INT, 'books'); |
因为我们用的是“CONVERT”函数,“SELECT”语句返回信息表示转换失败了。然而,如果你使用“ TRY_CONVERT”函数,如下面例子所示,该语句将会返回“NULL”值:
SELECT TRY_CONVERT(INT, 'books'); |
与“TRY_PARSE”函数类似,你可以使用“TRY_CONVERT”函数测试转换是否会失败,然后使用该函数返回的结果控制你的代码逻辑。
FORMAT函数
Transact-SQL现在就提供有“FORMAT”函数,支持你把数值转换为基于.NET Framework的格式串。此外,你可以指定返回字符串按照.NET Framework环境进行,这一点也与“PARSE”函数类似。
例如,下面的“SELECT”语句使用“FORMAT”函数返回当前日期和时间,基于“捷克”语言环境返回默认格式字符串:
SELECT FORMAT(GETDATE(), '', 'Cs-CZ'); |
“FORMAT”函数有三个参数。第一个是待转换数值。本例中,该数值是“GETDATE”函数返回值。第二个参数是格式串,因为本例中指定的是空串,所以就使用默认格式。第三个参数是语言环境代码。同样,这里使用的也是“捷克”代码。最后,该“SELECT”语句返回“4.6.2012 15:13:18”作为当前时间和日期值的展现。
我们来更进一步看看第二个参数格式串。在下面的例子中,我指定返回值被格式化为周内天数(星期几),月日期,年:
SELECT FORMAT(GETDATE(), 'dddd, MMMM dd, yyyy', 'Cs-CZ'); |
这次返回的结果就大不相同了,是这样的:“pondělí, června 04, 2012”。不过,如果你修改语言文化代码,返回结果将会再次改变。例如,下面的“SELECT”语句使用美国英语文化环境编码:
SELECT FORMAT(GETDATE(), 'dddd, MMMM dd, yyyy', 'en-US'); |
现在该“SELECT”语句返回值变成了“Monday, June 04, 2012”。
使用“FORMAT”函数的关键是要记得结果是基于一定格式串和语言环境代码生成的。
CHOOSE函数
“CHOOSE”函数的功能是从两个或多个值的列表中返回一个值,根据指定索引值进行判断。索引值是从“1”计起的整数,也就是该函数的第一个参数。该参数后面跟着就是值列表。
下面的例子中,最后的“SELECT”语句使用了“CHOOSE”函数,返回产品名称列表中的第二个值:
DECLARE @index INT = 2; DECLARE @valA VARCHAR(30) = (SELECT Name FROM Production.Product WHERE ProductID = 970); DECLARE @valB VARCHAR(30) = (SELECT Name FROM Production.Product WHERE ProductID = 971); DECLARE @valC VARCHAR(30) = (SELECT Name FROM Production.Product WHERE ProductID = 972); SELECT CHOOSE(@index, @valA, @valB, @valC); |
“ @index”变量被复制为整数“2”,作为第一个参数,表示应该返回值列表中的第二个值。其它参数是基于从“AdventureWorks2012”示例数据库中提取的值形成的。每个值都是一个产品名称。因为该索引设置的值是“2”,所以“CHOOSE”函数返回“ @valB”变量的值(Touring-2000 Blue, 50)。
IIF函数
“IIF”函数支持你测试表达式,并基于测试结果返回特定值。“IIF”函数有三个参数:有效的布尔表达式,如果表达式为真返回的值和如果表达式为假返回的值。(你可以把“IIF”函数看作是“CASE”语句的简写版。)
在下面的例子中,最后的“SELECT”语句使用“IIF”函数比较产品价格与同类产品平均价格的大小:
DECLARE @ProdID INT = 970; DECLARE @ProdPrice MONEY = (SELECT ListPrice FROM Production.Product WHERE ProductID = @ProdID); DECLARE @AvgPrice MONEY = (SELECT AVG(ListPrice) FROM Production.Product WHERE ProductNumber LIKE 'bk-%'); SELECT IIF(@ProdPrice > @AvgPrice, 'true', 'false'); |
前三个语句声明了变量,并给它们赋值。“ @ProdPrice”变量包含指定产品的列表价格。“ @AvgPrice”变量包含该类产品的平均价格,产品分类是“WHERE”从句中的条件“ProductNumber LIKE 'bk-%'”决定的。“IIF”函数中的第一个参数是布尔表达式,使用大于号“>”比较操作符来比较“ @ProdPrice”和“ @AvgPrice”的大小。如果该产品价格大于平均价格,表达式就返回真。否则表达式就返回假。
“IIF”函数的第二个参数是字符串值“true”。也就是说,如果第一个参数的布尔表达式判断结果为真,那么就返回字符串“true”。否则,就返回第三个参数内容,这里是字符串“false”。在本例中,产品价格小于平均价格,所以“IIF”函数返回“false”。
CONCAT函数
“CONCAT”函数连接两个或多个字符串值。如果参数不是字符串值,该函数会隐式地把它转换为字符串。即使传递“NULL”值作为参数,该函数也会把它转换为空串。“CONCAT”函数与连接运算符“+”类似,只是“CONCAT”函数处理非字符串和“NULL”值更方便些。
下面的“SELECT”语句中,“CONCAT”函数连接两个字符串和两列值:
SELECT CONCAT(Name, ' (', ProductNumber, ')') AS NewName FROM Production.Product WHERE ProductID = 970; |
要注意,每个参数都是字符串值,从列中来或者是指定字符串序列。在本例中,“ProductName”值是“Touring-2000 Blue, 46”,“ProductNumber”值是“BK-T44U-46”。因为使用了“CONCAT”操作符,该“SELECT”语句返回一个大字符串值“Touring-2000 Blue, 46 (BK-T44U-46)”。
翻译
相关推荐
-
OpenWorld18大会:Ellison宣布数据库的搜寻和破坏任务
在旧金山举行的甲骨文OpenWorld 2018大会中,甲骨文首席技术官(CTO)兼创始人Larry Elli […]
-
ObjectRocket着力发展Azure MongoDB服务
MongoDB吸引了微软公司的注意力,微软公司计划针对运行于该公司2017年发布的Azure Cosmos D […]
-
数据库和数据仓库的区别在哪儿?
目前,大部分数据仓库还是用数据库进行管理。数据库是整个数据仓库环境的核心,是数据存放的地方和提供对数据检索的支持。
-
如何使用服务来平衡Oracle RAC 数据库工作负载
为不同的应用程序配置不同的服务,DBA可以更有效地平衡集群工作负载,在Oracle RAC数据库环境下实现更好的应用程序性能。