SQL 语句技巧单列数据变多行数据

   碰到一个需求,将一个列的数据: “122,123,145” 或者“122,123,145,,变成多行,表值函数如下:  

Create FUNCTION transColS
(    
    @id varchar(4000)
)
RETURNS @st TABLE (id int) 
begin
   declare @str as varchar(4000)
   IF(substring(@id,len(@id),1))<>','
     SET @id=@id+','
set @str=@id declare @strV as varchar(4000) declare @num int set @num=(len(@str)-len(replace(@str, ',', '')))/len(',') --计算@str中有多少个“,”,用于循环 while(@num>0) begin set @strV=substring(@str,0,charindex(',',@str)) set @str=substring(@str,LEN(@strV)+2,LEN(@str)) set @num=@num-1 insert into @st(id) values(@strV) end return end

查询数据,即可看到数据

select ab.id,t.id from ab cross apply dbo.transColS(ab.id) t

     

结果是:
原有一列的数据:
123,124,125,126,

转化为多行的数据结果:
123
124
125
126
原文地址:https://www.cnblogs.com/zping/p/2088099.html