sqlserver 分割字符串为数组



---返回字符串按照指定分隔符分割后的数组的长度
CREATE function Get_StrArrayLength
(
  @str varchar(1024),   --要分割的字符串
  @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 ;


----按照指定的分隔符分割字符串为数组形式,然后获取指定元素。注: 元素个数从1开始
CREATE function Get_StrArrayStrOfIndex
(
  @str varchar(1024),   --要分割的字符串
  @split varchar(10),   --分隔符号
  @index int  --取第几个元素
)
returns varchar(1024)
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
 --这儿存在两种情况:1、字符串不存在分隔符号 2、字符串中存在分隔符号,跳出while循环后,@location为0,那默认为字符串后边有一个分隔符号。
  
  return substring(@str,@start,@location-@start)
end ;


---测试。注意:  P_GET_HttpRequestData 为sqlserver获取http请求数据的存储过程,在Sqlserver处理Http请求日志中有讲述。

CREATE PROCEDURE IPCC_IVR_QUERYCARDONECINFO(@dataStr VARCHAR(255),@dataIndex VARCHAR(4),@outText1 VARCHAR(255) OUT,@outText2 VARCHAR(255) OUT,@outText3 VARCHAR(255) OUT)
AS
BEGIN

  DECLARE @returnText VARCHAR(500)
  DECLARE @status int
  DECLARE @urlStr VARCHAR(255)
  SET  @urlStr = 'http://172.17.5.14:9090/df/sendDataToIVR.action?parametersStr='+@dataStr +'#'+@dataIndex+'&ifaceType=2';
EXEC  P_GET_HttpRequestData  @urlStr, @status OUTPUT, @returnText OUTPUT;
   SET @outText1 =  dbo.Get_StrArrayStrOfIndex(@returnText,',',1); 
   SET @outText2 =  dbo.Get_StrArrayStrOfIndex(@returnText,',',2); 
   SET @outText3 =  dbo.Get_StrArrayStrOfIndex(@returnText,',',3);
END;

---返回字符串按照指定分隔符分割后的数组的长度
CREATE function Get_StrArrayLength
(
  @str varchar(1024),   --要分割的字符串
  @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 ;


----按照指定的分隔符分割字符串为数组形式,然后获取指定元素。注: 元素个数从1开始
CREATE function Get_StrArrayStrOfIndex
(
  @str varchar(1024),   --要分割的字符串
  @split varchar(10),   --分隔符号
  @index int  --取第几个元素
)
returns varchar(1024)
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
 --这儿存在两种情况:1、字符串不存在分隔符号 2、字符串中存在分隔符号,跳出while循环后,@location为0,那默认为字符串后边有一个分隔符号。
  
  return substring(@str,@start,@location-@start)
end ;


---测试。注意:  P_GET_HttpRequestData 为sqlserver获取http请求数据的存储过程,在Sqlserver处理Http请求日志中有讲述。

CREATE PROCEDURE IPCC_IVR_QUERYCARDONECINFO(@dataStr VARCHAR(255),@dataIndex VARCHAR(4),@outText1 VARCHAR(255) OUT,@outText2 VARCHAR(255) OUT,@outText3 VARCHAR(255) OUT)
AS
BEGIN

  DECLARE @returnText VARCHAR(500)
  DECLARE @status int
  DECLARE @urlStr VARCHAR(255)
  SET  @urlStr = 'http://172.17.5.14:9090/df/sendDataToIVR.action?parametersStr='+@dataStr +'#'+@dataIndex+'&ifaceType=2';
EXEC  P_GET_HttpRequestData  @urlStr, @status OUTPUT, @returnText OUTPUT;
   SET @outText1 =  dbo.Get_StrArrayStrOfIndex(@returnText,',',1); 
   SET @outText2 =  dbo.Get_StrArrayStrOfIndex(@returnText,',',2); 
   SET @outText3 =  dbo.Get_StrArrayStrOfIndex(@returnText,',',3);
END;

版权声明:本文为Z_Y_J_1_2_3原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。