SQL SERVER2012中新增函数之字符串函数CONCAT详解

介绍

SQLSERVER 2012新增了两个字符串函数CONCAT和FORMAT。本文首先介绍一下CONCAT,CONCAT函数的作用是可以返回多个字符串拼接后的结果。

CONCAT 函数最多可以连接255个字符变量,当调用这个函数的时候需要至少接收两个参数,参数类型不一定是字符串类型,也可以是可以隐式转换为字符串的类型比如int ,float等类型。只要符合sql 2012的能隐式转换为字符串的规则即可,当我们想把两个值类型的数据连接起来的时候,不需要先将它们转为nvarchar然后再通过“+”来连接了

简单示例:

select CONCAT('a','b') as R1
/*
R1
----
ab
*/
select 'a'+'b' as R2
/*
R2
----
ab
*/ 

如此看来这个函数似乎使SQL语句变得更长了,这个函数到底有什么优点呢?

下面我举个实例说明一下(数据就从百度随便搜了个排行榜)

if object_id('tb') is not null drop table tb
create table tb([Rank] int,[Name] varchar(10),[SearchTime] int,[Remarks] varchar(10))
insert tb
select 1,'完美世界',118251,'我没看过' unionall
select 2,'莽荒纪',104532,'我没看过' unionall
select 3,'大主宰',93453,'我没看过' unionall
select 4,'绝世唐门',63333,'我没看过' unionall
select 5,'最强弃少',38198,'我没看过' unionall
select 6,'傲世九重天',31137,'我没看过' unionall
select 7,'唐砖',29166,'我没看过' unionall
select 8,'武极天下',26435,'我也没看过' unionall
select 9,'魔天记',25227,'我都没看过' unionall
select 10,'剑道独尊',25097,null 

针对以上数据,例如我们要得到如下结果:

第1名:完美世界 搜索指数:118251 备注:我没看过

也许我们会这样写:

select '第'+ltrim([Rank])+'名:'+[Name]+' 搜索指数:'+ltrim([SearchTime])+' 备注:'+isnull([Remarks],'') as R3 from tb 
/*
R3
--------------------------------------------------------------------
第1名:完美世界搜索指数:118251 备注:我没看过
第2名:莽荒纪搜索指数:104532 备注:我没看过
第3名:大主宰搜索指数:93453 备注:我没看过
第4名:绝世唐门搜索指数:63333 备注:我没看过
第5名:最强弃少搜索指数:38198 备注:我没看过
第6名:傲世九重天搜索指数:31137 备注:我没看过
第7名:唐砖搜索指数:29166 备注:我没看过
第8名:武极天下搜索指数:26435 备注:我也没看过
第9名:魔天记搜索指数:25227 备注:我都没看过
第10名:剑道独尊搜索指数:25097 备注:
*/ 

有了CONCAT以后,我们可以这样:

select concat('第',[Rank],'名:',[Name],' 搜索指数:',[SearchTime],' 备注:',[Remarks]) as R4 from tb
/*
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的情况。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对我们的支持。

(0)

相关推荐

  • SQL SERVER 2012新增函数之逻辑函数CHOOSE详解

    SQL SERVER 2012中新增了CHOOSE,该函数可以从值列表返回指定索引处的项. 例如: select CHOOSE(3,'A','B','C','D') as R1 /* R1 ---- C */ CHOOSE并不能这么用,例如有个字符串'A,B,C,D',我们并不能用choose得到其中的某个值: select choose(2,'A,B,C,D') /* null */ CHOOSE的主要功能和CASE WHEN类似,例如数据库中有字段Sex:1表示男,2表示女. if obje

  • 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 转换函数的比较(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

  • SqlServer2012中First_Value函数简单分析

    First_Value返回结果集中某列第一条数据的值,跟TOP 1效果一样,比较简单的一个函数 先贴测试用代码 DECLARE @TestData TABLE( ID INT IDENTITY(1,1), Department VARCHAR(20), LastName VARCHAR(20), Rate FLOAT ) INSERT INTO @TestData(Department,LastName,Rate) SELECT 'Document Control','Arifin',17.78

  • SqlServer2012中LEAD函数简单分析

    LEAD函数简单点说,就是把下一行的某列数据提取到当前行来显示,看示例更能解释清楚,先看测试用脚本 DECLARE @TestData TABLE( ID INT IDENTITY(1,1), Department VARCHAR(20), LastName VARCHAR(20), Rate FLOAT ) INSERT INTO @TestData(Department,LastName,Rate) SELECT 'Document Control','Arifin',17.7885 UNI

  • 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

  • C++ 中String 替换指定字符串的实例详解

    C++ 中String 替换指定字符串的实例详解 C++的string提供了replace方法来实现字符串的替换,但是对于将字符串中某个字符串全部替换这个功能,string并没有实现,我们今天来做的就是这件事. 首先明白一个概念,即string替换所有字符串,将"12212"这个字符串的所有"12"都替换成"21",结果是什么? 可以是22211,也可以是21221,有时候应用的场景不同,就会希望得到不同的结果,所以这两种答案都做了实现, 代码如

  • SQL SERVER2012中新增函数之字符串函数CONCAT详解

    介绍 SQLSERVER 2012新增了两个字符串函数CONCAT和FORMAT.本文首先介绍一下CONCAT,CONCAT函数的作用是可以返回多个字符串拼接后的结果. CONCAT 函数最多可以连接255个字符变量,当调用这个函数的时候需要至少接收两个参数,参数类型不一定是字符串类型,也可以是可以隐式转换为字符串的类型比如int ,float等类型.只要符合sql 2012的能隐式转换为字符串的规则即可,当我们想把两个值类型的数据连接起来的时候,不需要先将它们转为nvarchar然后再通过"+

  • C#实现String字符串转化为SQL语句中的In后接的参数详解

    实现把String字符串转化为In后可用参数代码: public string StringToList(string aa) { string bb1 = "("; if (!string.IsNullOrEmpty(aa.Trim())) { string[] bb = aa.Split(new string[] { "\r\n", ",", ";", "* " }, StringSplitOption

  • SQL Server中通用数据库角色权限的处理详解

    前言 安全性是所有数据库管理系统的一个重要特征.理解安全性问题是理解数据库管理系统安全性机制的前提. 最近和同事在做数据库权限清理的事情,主要是删除一些账号:取消一些账号的较大的权限等,例如,有一些有db_owner权限,我们取消账号的数据库角色db_owner,授予最低要求的相关权限.但是这种工作完全是一个体力活,而且是吃力不讨好,而且推进很慢.另外,为了管理方便和细化,我们又在常用的数据库角色外,新增了6个通用的数据库角色. 如下截图所示. 另外,为了减少授权工作量和一些重复的体力活,我们创

  • 在yii中新增一个用户验证的方法详解

    1.为什么要新增一个用户验证:因为我要将网站后台和前台做在同一个yii的应用中.但是前台也包含有会员的管理中心.而这两个用户验证是完全不同的,所以需要两个不同登陆页面,要将用户信息保存在不同的cookie或session中.所以需要在一个应用中增加一个用户验证2.yii的用户验证:在自定义用户验证前,我们首先要弄清楚yii的验证和授权方式.为了验证一个用户,我们需要定义一个有验证逻辑的验证类.在yii中这个类需要实现IUserIdentity接口,不同的类就可以实现不同的验证方 法.网站登陆一般

  • SQL Server中对数据截取替换的方法详解

    REPLACE(要修改字段名,'被替换的特定字符','替换的字符') 表结构和插入数据 CREATE DATABASE TEST GO USE TEST GO CREATE TABLE TestTable ( UserName VARCHAR(50), UserPwd VARCHAR(50) ) GO INSERT INTO TestTable (UserName,UserPwd) VALUES ('ASDFFFF','WWWEEE') INSERT INTO TestTable (UserNa

  • JDK8中新增的原子性操作类LongAdder详解

    前言 本文主要给大家介绍了关于JDK8新增的原子性操作类LongAdder的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: LongAdder简单介绍 LongAdder类似于AtomicLong是原子性递增或者递减类,AtomicLong已经通过CAS提供了非阻塞的原子性操作,相比使用阻塞算法的同步器来说性能已经很好了,但是JDK开发组并不满足,因为在非常高的并发请求下AtomicLong的性能不能让他们接受,虽然AtomicLong使用CAS但是CAS失败后还是通过

  • 关于JDK8中的字符串拼接示例详解

    前言 在Java开发者中,字符串的拼接占用资源高往往是热议的话题. 让我们深入讨论一下为什么会占用高资源. 在Java中,字符串对象是不可变的,意思是它一旦创建,你就无法再改变它.所以在我们拼接字符串的时候,创建了一个新的字符串,旧的被垃圾回收器所标记. 如果我们处理上百万的字符串,然后,我们就会生成百万的额外字符串被垃圾回收器处理. 在大多数的教程中,也许你会看到用+号拼接字符串会生成多个String,导致性能过差,建议使用StringBuffer/StringBuilder来拼接. 可是真的

  • Python中关于元组 集合 字符串 函数 异常处理的全面详解

    目录 元组 集合 字符串 1.字符串的驻留机制 2.常用操作 函数 1.函数的优点: 2.函数的创建:def 函数名([输入参数]) 3.函数的参数传递: 4.函数的返回值: 5.函数的参数定义: 6.变量的作用区域 7.递归函数:函数体内套用该函数本身 8.将函数存储在模块中 9.函数编写指南: Bug 1.Bug常见类型 2.常见异常类型 3.python异常处理机制 pycharm开发环境的调试 编程思想 (1)两种编程思想 (2)类和对象的创建 元组 元组是不可变序列 多任务环境下,同时

  • SQL Server中利用正则表达式替换字符串的方法

    建立正则替换函数,利用了OLE对象,以下是函数代码: --如果存在则删除原有函数 IF OBJECT_ID(N'dbo.RegexReplace') IS NOT NULL DROP FUNCTION dbo.RegexReplace GO --开始创建正则替换函数 CREATE FUNCTION dbo.RegexReplace ( @string VARCHAR(MAX), --被替换的字符串 @pattern VARCHAR(255), --替换模板 @replacestr VARCHAR

随机推荐