zoukankan      html  css  js  c++  java
  • MSSQL—字符串分离(Split函数)

    前面提到了记录合并,有了合并需求肯定也会有分离需求,说到字符串分离,大家肯定会想到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',',')

    可以得到如下结果:

    image

    本文转自:http://www.cnblogs.com/leolis/p/3978569.html

  • 相关阅读:
    openmv4测距和测量物体大小
    openmv4颜色识别
    openmv4实现脱机运行
    在GTK+2.0中进行页面切换
    用makefile文件执行sqlite3
    简单的TXT文件存储
    用C语言实现延时功能
    用C语言实现登入系统密码不回显
    使用链表实现一个简单的登录系统
    PHP快速获取MySQL数据库表结构
  • 原文地址:https://www.cnblogs.com/zuqing/p/4693051.html
Copyright © 2011-2022 走看看