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
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/110915.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...