sql 按符号拆分字符串

单行的数据可以直接用表值函数
Create FUNCTION [dbo].[F_Split]
  (
      @SplitString nvarchar(max),  --源字符串
      @Separator nvarchar(10)=' '   --分隔符号,默认为空格
  )
  RETURNS @SplitStringsTable TABLE  --输出的数据表
  (
      [id] int identity(1,1),
     [value] nvarchar(max)
  )
  AS
  BEGIN
      DECLARE @CurrentIndex int;
      DECLARE @NextIndex int;
      DECLARE @ReturnText nvarchar(max);
 
      SELECT @CurrentIndex=1;
      WHILE(@CurrentIndex<=len(@SplitString))
          BEGIN
              SELECT @NextIndex=charindex(@Separator,@SplitString,@CurrentIndex);
              IF(@NextIndex=0 OR @NextIndex IS NULL)
                  SELECT @NextIndex=len(@SplitString)+1;
                  SELECT @ReturnText=substring(@SplitString,@CurrentIndex,@NextIndex-@CurrentIndex);
                  INSERT INTO @SplitStringsTable([value]) VALUES(@ReturnText);
                  SELECT @CurrentIndex=@NextIndex+1;
              END
      RETURN;
  END

GO

调用的时候
select * from dbo.F_Split('''+@DJBH+''','';'')






如果是多行的数据集
create table test
( code varchar(10),
 single_No varchar(100))

insert into test(code,single_No)
select '001','201801001;201801004;'
union
select '002','201801002;'

select * from test




;with temp as 
( select a.code,a.single_No, charindex(';',a.single_No) as start, charindex(';',a.single_No)-1 as lenth
  from test a
  union all
  select b.code,b.single_No,charindex(';',b.single_No,start+1), charindex(';',b.single_No,start+1)-start-1 as lenth
  from temp b 
  where start<>0
)
select substring(single_No,start -lenth,lenth) as obj, code 
from temp
where (start <> 0)
order by code 

猜你喜欢

转载自blog.csdn.net/love33jing2012/article/details/93480302