首页 > 数据库 >SQL字符串转换为数组

SQL字符串转换为数组

时间:2022-09-28 16:14:02浏览次数:79  
标签:set 数组 -- next start location str 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

信息来源于 https://blog.csdn.net/nextstand/article/details/50999738

 

标签:set,数组,--,next,start,location,str,SQL,字符串
From: https://www.cnblogs.com/zhou0811/p/16738439.html

相关文章

  • MYSQL中的json数据操作
    1.2基础查询操作用法提示:如果json字符串不是数组,则直接使用$.字段名如果json字符串是数组[Array],则直接使用$[对应元素的索引id]1.2.1一般json查询使用 json字段......
  • 解决Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver cl
    解决Loadingclass`com.mysql.jdbc.Driver'.Thisisdeprecated.Thenewdriverclassis`com.mysql.cj.jdbc.Driver'.Thedriverisautomaticallyregisteredviat......
  • Mysql 数据库SQL脚本导入
    1.进入mysql命令行窗口mysql-uroot-p1234562.展示所有数据库showdatabases;3.选择数据库use数据库名4.展示选择的数据库中所有表showtables;5.导入指定......
  • MYSQL定时执行事件
    开启事件调度器1、确认是否开启SHOWVARIABLESLIKE'event_scheduler';2、开启命令SETGLOBALevent_scheduler=ON;创建事件<创建后默认开启>CREATEEVENT[IFNOT......
  • mysql存储过程的调用方法
    mysql存储过程的调用方法是经常会用到的,下面就为您介绍mysql存储过程的调用方法,希望对您学习mysql存储过程方面会有些许帮助。先进入mysql命令行环境然后创建函数,先要选择数......
  • 力扣349(java&python)-两个数组的交集(简单)
    题目:给定两个数组 nums1 和 nums2,返回它们的交集 。输出结果中的每个元素一定是唯一的。我们可以不考虑输出结果的顺序。 示例1:输入:nums1=[1,2,2,1],num......
  • 一步步搞懂 MySQL 元数据锁(MDL)
    一步步搞懂MySQL元数据锁(MDL)某日,路上收到用户咨询,为了清除空间,想删除某200多G大表数据,且已经确认此表不再有业务访问,于是执行了一条命令‘deletefrombigtable’,但......
  • [数组和链表的区别]
    [数组和链表的区别]数组'''数组插入数据因为需要连在一起,如果内存空间不连续就得全体迁移,甚至出现内存空间足够但是由于不在一起而导致无法为数组分配内存。'''链......
  • 一步步搞懂 MySQL 元数据锁(MDL)
    一步步搞懂MySQL元数据锁(MDL)某日,路上收到用户咨询,为了清除空间,想删除某200多G大表数据,且已经确认此表不再有业务访问,于是执行了一条命令‘deletefrombigtable’,但......
  • oracle在SQL窗口中调用存储过程sql
    DECLARErs_json_outVARCHAR2(512);p_errmsgVARCHAR2(512);BEGINSP_SST_GET_CARD_NO('{"P_ZDBH00":"001","P_INSUORG":"360000","P_ID0000":"02","P_SFZHAO":"350821198......