需求说明
将字符串按照指定的分隔符进行分割,并将结果按照从后往前的顺序倒序排列,拼接后的结果用‘/’符连接。(也可以按照指定符号分割为多个列,修改最后一部分即可)
创建测试表及数据
/* 创建一张测试表及数据 */ create table tmp(id int primary key ,name varchar(200)); insert into tmp select 1,'组长,班长,校长,委员长'; insert into tmp select 2 ,'连长,营长,师长,军长,司令'; insert into tmp select 3 ,'村长,镇长,区长,市长,厅长,省长,部长';
创建函数
create FUNCTION [dbo].[f_split] ( @str NVARCHAR(500), @delimiter NVARCHAR(20) )RETURNS @table2 TABLE(val NVARCHAR(500)) AS BEGIN DECLARE @index INT,@startsplit INT,@id INT ,@maxid int,@id2 int declare @table table (id int,val nvarchar(50)) SELECT @index=CHARINDEX(@delimiter,@str),@startsplit=1,@id=1 WHILE @index>0 BEGIN IF @id>1 BEGIN SELECT @startsplit=@index+LEN(@delimiter) SELECT @index=CHARINDEX(@delimiter,@str,@startsplit) END IF @index>0 BEGIN INSERT INTO @table VALUES (@id,SUBSTRING(@str,@startsplit,@index-@startsplit)) END ELSE BEGIN INSERT INTO @table VALUES (@id,SUBSTRING(@str,@startsplit,LEN(@str)-@startsplit+1)) END SELECT @id=@id+1 END select @id2=Min(id) from @table select @maxid=MAX(id) from @table insert into @table2 select val from @table where id=@maxid select @maxid= @maxid -1 while @id2<=@maxid begin update @table2 set val=val+'/'+(select val from @table where id=@maxid ) select @maxid =@maxid- 1 end RETURN END
执行查询
select name,(select val from [f_split](name,',')) from tmp;
结果如下
TIPs:
以上函数包含字符串截取函数、字符串长度、字符串位置等,如需获取该函数的每步说明可以联系我获取,谢谢。