SQL SERVER2012中新增函数之字符串函数CONCAT详解
介绍
SQLSERVER2012新增了两个字符串函数CONCAT和FORMAT。本文首先介绍一下CONCAT,CONCAT函数的作用是可以返回多个字符串拼接后的结果。
CONCAT函数最多可以连接255个字符变量,当调用这个函数的时候需要至少接收两个参数,参数类型不一定是字符串类型,也可以是可以隐式转换为字符串的类型比如int,float等类型。只要符合sql2012的能隐式转换为字符串的规则即可,当我们想把两个值类型的数据连接起来的时候,不需要先将它们转为nvarchar然后再通过“+”来连接了
简单示例:
selectCONCAT('a','b')asR1 /* R1 ---- ab */ select'a'+'b'asR2 /* R2 ---- ab */
如此看来这个函数似乎使SQL语句变得更长了,这个函数到底有什么优点呢?
下面我举个实例说明一下(数据就从百度随便搜了个排行榜)
ifobject_id('tb')isnotnulldroptabletb createtabletb([Rank]int,[Name]varchar(10),[SearchTime]int,[Remarks]varchar(10)) inserttb select1,'完美世界',118251,'我没看过'unionall select2,'莽荒纪',104532,'我没看过'unionall select3,'大主宰',93453,'我没看过'unionall select4,'绝世唐门',63333,'我没看过'unionall select5,'最强弃少',38198,'我没看过'unionall select6,'傲世九重天',31137,'我没看过'unionall select7,'唐砖',29166,'我没看过'unionall select8,'武极天下',26435,'我也没看过'unionall select9,'魔天记',25227,'我都没看过'unionall select10,'剑道独尊',25097,null
针对以上数据,例如我们要得到如下结果:
第1名:完美世界搜索指数:118251备注:我没看过
也许我们会这样写:
select'第'+ltrim([Rank])+'名:'+[Name]+'搜索指数:'+ltrim([SearchTime])+'备注:'+isnull([Remarks],'')asR3fromtb
/* R3 -------------------------------------------------------------------- 第1名:完美世界搜索指数:118251备注:我没看过 第2名:莽荒纪搜索指数:104532备注:我没看过 第3名:大主宰搜索指数:93453备注:我没看过 第4名:绝世唐门搜索指数:63333备注:我没看过 第5名:最强弃少搜索指数:38198备注:我没看过 第6名:傲世九重天搜索指数:31137备注:我没看过 第7名:唐砖搜索指数:29166备注:我没看过 第8名:武极天下搜索指数:26435备注:我也没看过 第9名:魔天记搜索指数:25227备注:我都没看过 第10名:剑道独尊搜索指数:25097备注: */
有了CONCAT以后,我们可以这样:
selectconcat('第',[Rank],'名:',[Name],'搜索指数:',[SearchTime],'备注:',[Remarks])asR4fromtb /* R4 --------------------------------------------------------------------- 第1名:完美世界搜索指数:118251备注:我没看过 第2名:莽荒纪搜索指数:104532备注:我没看过 第3名:大主宰搜索指数:93453备注:我没看过 第4名:绝世唐门搜索指数:63333备注:我没看过 第5名:最强弃少搜索指数:38198备注:我没看过 第6名:傲世九重天搜索指数:31137备注:我没看过 第7名:唐砖搜索指数:29166备注:我没看过 第8名:武极天下搜索指数:26435备注:我也没看过 第9名:魔天记搜索指数:25227备注:我都没看过 第10名:剑道独尊搜索指数:25097备注: */
从上面的实例中我们可以看到CONCAT的两个优点:
1.当数据类型不一致的时候可以自动转换;
2.对于null的处理,不用isnull也可以避免因拼接而导致结果为null的情况。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对毛票票的支持。