Sql实现Split

Sql实现Split

create function [dbo].[Get_StrArrayLength]
(
 @str varchar(max),  –要分割的字符串
 @split varchar(10)  –分隔符号
)
returns int
as
begin
 declare @location int
 declare @start int
 declare @length int
 –去掉前后空格
 set @str=ltrim(rtrim(@str))
 –分隔符第一次出现的位置
 set @location=charindex(@split,@str)
 –设置分隔后的字符串长度为1
 set @length=1

 while @location<>0
 begin
   set @start=@location+1
   set @location=charindex(@split,@str,@start)
   set @length=@length+1
 end
 return @length
end

 

 drop function [dbo].[Get_StrArrayStrOfIndex]
go
create function [dbo].[Get_StrArrayStrOfIndex]
(
 @str varchar(max),  –要分割的字符串
 @split varchar(10),  –分隔符号
 @index int –取第几个元素
)
returns varchar(1024)
as
begin
 declare @location int
 declare @start int
 declare @next int
 declare @seed int
 declare @pos int
 if @index<=0
 return ”
 set @str=ltrim(rtrim(@str))
 set @start=1
 set @next=1
 set @pos=1
 set @seed=len(@split)
 set @location=charindex(@split,@str)
 while @location<>0 and @index>@next and @pos<@index
 begin
   set @start=@location+@seed
   set @location=charindex(@split,@str,@start)
   set @next=@next+1
   set @pos=@pos+1
 end
 if @location =0
 if @pos<>@index
  return ”
 else
  select @location =len(@str)+1
–这儿存在两种情况:1、字符串不存在分隔符号 2、字符串中存在分隔符号,跳出while循环后,@location为0,那默认为字符串后边有一个分隔符号。
 return substring(@str,@start,@location-@start)
end

declare @id varchar(30)
select @id=dbo.Get_StrArrayStrOfIndex(‘4321,2223,333,5554′,’,’,2)

 

我的改进版本,可像Hashtable一样访问

drop function [dbo].[Get_ArrayStrOfName]
Go

create function [dbo].[Get_ArrayStrOfName]
(
    @str varchar(5000),  –要分割的字符串
    @split varchar(1),  –分隔符号
    @itemSplit varchar(1), –元素分割符
    @item varchar(20)   –取哪个元素
)
returns varchar(1024)
As
Begin
    declare @location int            –找到子串的位置
    declare @tempItem varchar(50)        –当前项
    declare @tempItemName varchar(20)    –当前项的名称
    set @str=ltrim(rtrim(@str))
    set @tempItem=”
    set @tempItemName=”
while len(@str)>0
Begin
    —–找到一个子项–
    set @location=charindex(@split,@str,1)
    if @location>0
        Begin
                set @tempItem=substring(@str,1,@location-1)
                set @str=substring(@str,@location+1,len(@str))
        End
    Else
        Begin
            set @tempItem=@str
            set @str=”
        end    
    ———-判断当前子项的名称————–
    set @location=charindex(@itemSplit,@tempItem,1)
    if @location>0
        Begin
            set @tempItemName=substring(@tempItem,1,@location-1)
            if  @tempItemName=@item
                return substring(@tempItem,@location+1,len(@tempItem))
        End
End
    return ”
End
Go

declare @id varchar(30)
select @id=dbo.Get_ArrayStrOfName(‘ff@4321,ffg@2223,ggg@333,ddd@5554’, ‘,’, ‘@’, ‘ff’)
print @id

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/110915.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Java网页版仿QQ实现在线聊天功能(附带源码)[通俗易懂]

    Java网页版仿QQ实现在线聊天功能(附带源码)[通俗易懂]疫情期间,整天闷在家里又不能聚会,大把的空余时间差点让我发霉,后来有个客户发来新年祝贺,情不自禁想起了一件事情,就是他曾经提起过,要是在后台管理系统里面整合个聊天功能该多好啊,有了这个念头,马上行动起来!!!一.系统演示1.1聊天窗体主界面演示1.2模拟两人在线聊天(点击图片查看演示视频)1.3在线演示(真实系统展示)在线演示,点击进入系统到这里,若是您想要的,接下来听我娓娓道来↘↘二.开发工具开发软件:JDK7.0、MyEclipse2014数据库:MySQL5.6服

    2022年5月15日
    42
  • Lucene分词实现—Analyzer、TokenStream(Token、Tokenizer、Tokenfilter)

    Lucene分词实现—Analyzer、TokenStream(Token、Tokenizer、Tokenfilter)一 分清概念:  1  TokenStream是用来走访Token的iterator(迭代器),       Tokenizer继承自TokenStream,其输入为Reader。       TokenFilter继承自TokenStream,其作用是用来完成对TokenStream的过滤操作,譬如 去StopWords,将Token变为小

    2022年7月22日
    6
  • Javascript-判断是否为数组的5种方法

    Javascript-判断是否为数组的5种方法判断是否为数组的5种方法1instanceof2constructor3Array.isArray()最推荐方法4typeof5Object.prototype.toSrtring.call()总结vararr=[1,1,1,1]vara=’2323’varb={name:’xiao’,age:12}varn=11instanceof1instanceof运算符用于检验构造函数的prototype属性是否出现在对象的原型链中的任何位置,返回一个布尔值。

    2022年10月29日
    0
  • [高精度][二分]JZOJ 1207 遥控车

    [高精度][二分]JZOJ 1207 遥控车

    2021年6月13日
    92
  • 提问的艺术,原文链接

    提问的艺术,原文链接提问的艺术

    2022年6月23日
    19
  • centos7搭建hadoop集群之rsync和xsync[通俗易懂]

    centos7搭建hadoop集群之rsync和xsync[通俗易懂]文章记录于各个服务器(或者虚拟机等)已经配置了ssh免密登录,可执行下面操作,未配置ssh免密登录,可参考:https://blog.csdn.net/yhblog/article/details/84029535此文章是基于centos7minimal版本的,纯净系统,所以还需要安装rsync工具(确保所有节点都必须安装rsync)否则报错:安装成功:启动rsync服务sys…

    2022年6月2日
    30

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号