前面提到了记录合并,有了合并需求肯定也会有分离需求,说到字符串分离,大家肯定会想到SPLIT函数,这个在.NET,Java和JS中都有函数,很可惜在SQL SERVER中没有,我们只能自己来写这么一个函数。

首先来分析一下怎么写这个函数,以之前合并的字符串为例,“张三,李四,王五,钱六,赵七,Tom,Amy,Joe,Leo”,现在要将此字符串按照“,”进行分离得到一组数据,现在可以得出这个函数传入变量有两个,一个是目标字符串,我们定义为@string,数据类型为nvarchar(500),选择nvarchar()是为了兼顾所有Unicode字符集,比如中文;另一个变量为分隔符,我们定义为@separator,数据类型为nvarchar(10),输出变量则定义为@array,一个单列列名为String,数据类型为nvarchar(500)的Table。

下面来分析具体的拆分方法,以字符串“张三,李四,王五,钱六,赵七,Tom,Amy,Joe,Leo”为例,首先得找到第一个“,”,然后把“张三”截取出来,然后将目标字符串变成“李四,王五,钱六,赵七,Tom,Amy,Joe,Leo”,然后再找第一个“,”,把“李四”截取出来,依次类推,直到找不到“,”,有了这个思路,下面就直接实现,查找字符串在程序语言中一般用indexOf方法,截取一般用Substring方法,SQL SERVER中有SUBSTRING函数用来截取字符串,但是没有indexOf查找函数,取而代之的是CHARINDEX和PATINDEX函数,CHARINDEX用于完全匹配查找,而PATINDEX用于模糊匹配查找,根据我们的需求,选用CHARINDEX函数,整个SPLIT函数代码如下:

CREATE FUNCTION [dbo].[SPLIT] 

(

-- Add the parameters for the function here

@string nvarchar(500),  

@separator nvarchar(10) 

)

RETURNS @array TABLE(String nvarchar(500)) 

AS

BEGIN

-- Declare the return variable here

DECLARE @separatorIndex int,@tempString nvarchar(500),@tagString nvarchar(500)

-- Add the T-SQL statements to compute the return value here

SET @tagString=@string

SET @separatorIndex=CHARINDEX(@separator,@tagString)  

WHILE(@separatorIndex<>0)

BEGIN

SET @tempString = SUBSTRING(@tagString,1,@separatorIndex-1)  

INSERT INTO @array(String) VALUES(@tempString)  

SET @tagString = SUBSTRING(@tagString,@separatorIndex+1,LEN(@tagString)-@separatorIndex)  

SET @separatorIndex=CHARINDEX(@separator,@tagString)  

END  

SET @tempString = @tagString  

IF (LEN(@tempString)>0)  

INSERT INTO @array(String) VALUES(@tagString)  

-- Return the result of the function

RETURN

END

GO

接着测试一下:

SELECT * FROM dbo.SPLIT(N'张三,李四,王五,钱六,赵七,Tom,Amy,Joe,Leo',',')

可以得到如下结果:

MSSQL—字符串分离(Split函数)的更多相关文章

  1. MSSQL—字符串分离(Split函数)

    前面提到了记录合并,有了合并需求肯定也会有分离需求,说到字符串分离,大家肯定会想到SPLIT函数,这个在.NET,Java和JS中都有函数,很可惜在SQL SERVER中没有,我们只能自己来写这么一个 ...

  2. python 字符串的split()函数详解

    split翻译为分裂.  split()就是将一个字符串分裂成多个字符串组成的列表. split()当不带参数时以空格进行分割,当代参数时,以该参数进行分割. //---当不带参数时 example: ...

  3. python 字符串的split()函数详解(转)

    作者:宋桓公 出处:http://www.cnblogs.com/douzi2/ 如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,但是未经作者本人同 ...

  4. Java开发:字符串切割split函数——切割符转码注意事项

    一.问题如下: 1.先对一个已有字符串进行操作,使用     ;     进行分割: //示例字符串 String string="sr1.db1.tb1.df1;sr2.db2.tb2.d ...

  5. 层次数据结构字符串处理,split函数使用

    String str1 = "11@22#33,44,55,#bb#cc,dd,ee,#@DDD@TTT#999,#@"; String[] CX = str1.split(&qu ...

  6. python split()函数使用拆分字符串 将字符串转化为列表

    函数:split()Python中有split()和os.path.split()两个函数,具体作用如下:split():拆分字符串.通过指定分隔符对字符串进行切片,并返回分割后的字符串列表(list ...

  7. 字符串split函数

    https://www.cnblogs.com/hjhsysu/p/5700347.html 函数:split() Python中有split()和os.path.split()两个函数,具体作用如下 ...

  8. 【SQL】sql版Split函数。用于拆分字符串为单列表格

    功能与.net版string.Split函数类似,只不过.net返回的是数组,这个返回的是一个单列表格,每个拆分出来的子串占一行.可选是否移除空格子串和重复项.市面上类似的函数不算少,但大多都是在循环 ...

  9. js使用split函数按照多个字符对字符串进行分割的方法

    这篇文章主要介绍了js使用split函数按照多个字符对字符串进行分割的方法,实例分析了split函数的使用技巧,非常具有实用价值,需要的朋友可以参考下   本文实例讲述了js使用split函数按照多个 ...

随机推荐

  1. Pycharm快捷方式

    PYCHARM的快捷方式 PyCharm3.0默认快捷键(翻译的)1.编辑(Editing)Ctrl + Space 基本的代码完成(类.方法.属性)Ctrl + Alt + Space 快速导入任意 ...

  2. Android ORM应用开发框架KJFrameForAndroid使用详解

    本文将为大家介绍一款Android ORM应用开发框架KJFrameForAndroid,很多时候我们也叫它KJLibrary. KJFrameForAndroid简介 KJFrameForAndro ...

  3. 模仿JavaAppArguments.java示例,编写一个程序,此程序从命令行接收多个数 字,求和之后输出结果,写出其的设计思想、程序流程图、源程序代码。

    一 设计思想 首先现在file中建立一个类,并把任务名和类名写上(注意类名的大写):第二步则是参数的输入,并且定义求和变量:第三步则是对参数数据类型的要求,要把字符类型转化为整数类型并输出(这也是本道 ...

  4. HDU 4951 Multiplication table(2014 Multi-University Training Contest 8)

    思路   如果进制为p    那么当x<p时 (p-1)*(p-x)=(p-(x+1))  *p +x     因为x<p  所以没有进位  所以高位上的数字为    p-(x+1). 根 ...

  5. Android中的数据保存

    形式 Android的数据保存分为3种形式:file, SharedPreference, Database 文件 主要思想就是通过Context类中提供的openFileInput和openFile ...

  6. Java JDBCI批量插入数据

    智能插入:将整批分批,每一千条提交一次,sql注入(安全,使用软解析,提高效率) sql注入攻击:简单例子 select * from table where name='"+un+&quo ...

  7. VisualSVN 4.0.11补丁原创发布

    VisualSVN 4.0.11补丁原创发布 目前是官方最新版本.

  8. Google 开源技术protobuf

    http://blog.csdn.net/hguisu/article/details/20721109#0-tsina-1-1601-397232819ff9a47a7b7e80a40613cfe1 ...

  9. JSTL标签库的使用

    首先是四大标签库 核心 标签库 <%@ taglib uri="http://java.sun.com/jsp/jstl/core"%> 格式标签库 <%@ ta ...

  10. Hibernate的增删改查

    一.搭建Hibernate开发环境,这里就不说了,直接说环境搭好后的事情. 二.项目的目录结构