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

时间:2021-06-13 19:20:33

   碰到一个需求,将一个列的数据: “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