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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • DropDownList1.Items.Insert 与 DropDownList1.Items.Add 的区别[通俗易懂]

    DropDownList1.Items.Insert 与 DropDownList1.Items.Add 的区别[通俗易懂]Add方法是把列表项插入下拉列表的尾部!Insert方法是把列表项插入下拉列表的指定位置!ListItem有两个属性Text用于显示的Value用于记录值,SelectedValue 是取选中项的ListItem的Value值,Items[DropDownList1.SelectedIndex].Text  是指定索引处ListItem的Text值,两者是不一样…

    2022年7月18日
    15
  • Postman教程大全「建议收藏」

    Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件Postman背景介绍用户在开发或者调试网络程序或者是网页B/S模式的程序的时候是需要一些方法来跟踪网页请求的,用户可以使用一些网络的监视工具比如著名的Firebug等网页调试工具。今天给大家介绍的这款网页调试工具不仅可以调试简单的css、html、脚本等简单的网页基本信息,它还可以发送几乎所有类型的HTTP请求!Postman在发送网络HTTP请求方面可以说是Chrome插件类产品中的代表产品之一。Postman的操

    2022年4月6日
    48
  • mysql decimal类型排序「建议收藏」

    mysql decimal类型排序「建议收藏」mysqldecimal类型排序decimal类型是按照字典序排序!decimal类型是按照字典序排序!

    2022年7月17日
    19
  • 食品生物技术学计算机吗,食品生物技术「建议收藏」

    食品生物技术学计算机吗,食品生物技术「建议收藏」三、教学任务食品生物技术系主要承担本科生的课程如下:生物化学、微生物学、食品营养与卫生学、食品生物技术、实验设计与数据处理、综合性实验课等课程。承担生物化工和食品科学专业研究生高等生物化学、高等微生物学、实验动物学、现代生物技术等课程。四、主要研究方向与内容  食品生物技术系主要从事与食品生物技术方向的教学、科研及甜菜分子生物学方向的科研、研究生培养工作。1.食品分子营养与安全1.1食品分子营养学…

    2022年7月11日
    17
  • 论文精读——CenterNet :Objects as Points[通俗易懂]

    论文精读——CenterNet :Objects as Points[通俗易懂]论文题目:ObjectsasPoints论文地址:https://arxiv.org/pdf/1904.07850.pdf发布时间:2019.4.16机构:UTAustin,UCBerkeley代码:https://github.com/xingyizhou/CenterNetAbstract目标检测识别往往在图像上将目标以轴对称的框形式框出。大…

    2022年7月26日
    4
  • Python获取时间戳_Python中文当前时间

    Python获取时间戳_Python中文当前时间原博文2019-01-0410:42−#!/usr/bin/python#-*-coding:UTF-8-*-importtime;#引入time模块ticks=time.time()print(“当前时间戳为:”,ticks)输出:当前时间戳为:1459994552.51&nbsp…相关推荐2019-12-0610:29−1.获取当前时间的时间…

    2022年10月2日
    3

发表回复

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

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