前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Sql实现Split

Sql实现Split

作者头像
全栈程序员站长
发布2022-07-04 14:25:51
4170
发布2022-07-04 14:25:51
举报
文章被收录于专栏:全栈程序员必看

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.cn/110915.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021年7月3,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档