SQL字符串转换为数组
思路:
按指定符号分割字符串,返回分割后的元素个数,方法很简单,就是看字符串中存在多少个分隔符号,然后再加一,就是要求的结果。
——返回字符串数组长度函数
create function Get_StrArrayLength
(
@str varchar(5000), --要分割的字符串
@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)
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
——按指定符号分割字符串,返回分割后指定索引的第几个元素
create function Get_StrArrayStrOfIndex
(
@str varchar(5000), --要分割的字符串
@split varchar(10), --分隔符号
@index int --取第几个元素
)
returns varchar(5000)
as
begin
declare @location int
declare @start int
declare @next int
declare @seed int
set @str=ltrim(rtrim(@str))
set @start=1
set @next=1
set @seed=len(@split)
set @location=charindex(@split,@str)
while @location<>0 and @index>@next
begin
set @start=@location+@seed
set @location=charindex(@split,@str,@start)
set @next=@next+1
end
if @location =0 select @location =len(@str)+1
return substring(@str,@start,@location-@start)
end
——调用示例
--==================================
declare @str varchar(5000)
set @str="1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48"
print dbo.Get_StrArrayLength(@str,",")
declare @next int
declare @s varchar(100)
set @next=1
while @next<=dbo.Get_StrArrayLength(@str,",")
begin
print dbo.Get_StrArrayStrOfIndex(@str,",",@next) ----输出数组中的值
set @next=@next+1
end
--==================================
——检查一个元素是否在数组中
Create function CheckStrInArr(@s as varchar(50),@sArr as varchar(5000)) returns int
as
begin
declare @str varchar(5000)
set @str=@sArr
declare @next int
declare @ret int
set @ret=0
set @next=1
while @next<=dbo.Get_StrArrayLength(@str,",")
begin
if dbo.Get_StrArrayStrOfIndex(@str,",",@next)=@s
begin
set @ret=1;
end
set @next=@next+1
end
return @ret
end
-- =========调用示例========
declare @a int
set @a=dbo.CheckStrInArr("8","2,3,5,8")
select @a
-- =========调用示例========
——检查一个元素是否与数组中的相匹配
--select dbo.CheckStrLikeInArr(2,"d","sde,df,aad,d,fgsa,fgd")
Create function CheckStrLikeInArr
(
@liketype int=0, --like类型(0为为@keyword%,2为) 一般只用0
@keyword as varchar(50), --要检查的关键字
@sArr as varchar(5000) --数组
)
returns nvarchar(max)
as
begin
declare @str varchar(5000)
set @str=@sArr
declare @start int
declare @result nvarchar(max)
set @result=""
set @start=1
declare @temp nvarchar(20);
while @start<=dbo.Get_StrArrayLength(@str,",")
begin
if @liketype=0
begin
set @temp=dbo.Get_StrArrayStrOfIndex(@str,",",@start);
if @temp like "%"+ @keyword+"%"
begin
set @result=@result+ @temp +",";
end
set @start=@start+1
end
else if @liketype=1
begin
if dbo.Get_StrArrayStrOfIndex(@str,",",@start) like ""+ @keyword +"%"
begin
set @result=dbo.Get_StrArrayStrOfIndex(@str, "," , @start)+",";
end
set @start=@start+1
end
else if @liketype=2
begin
if dbo.Get_StrArrayStrOfIndex( @str, "," , @start) like "%"+ @keyword+""
begin
set @result=dbo.Get_StrArrayStrOfIndex(@str, "," , @start)+",";
end
set @start=@start+1
end
end
return @result
-- return cast(dbo.Get_StrArrayLength(@result,",")as nvarchar(2000))
end
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: JavaScript字符串拼接变量名及赋值
- 下一篇: js 动态拼接已有的变量名并调用