本文介绍了如何在MySQL中将逗号分隔的字段扩展为多行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
select id, ips from users;
查询结果
id ips
1 1.2.3.4,5.6.7.8
2 10.20.30.40
3 111.222.111.222,11.22.33.44
4 1.2.53.43
我想运行产生以下输出的查询
I'd like to run a query that produces the following output
user_id ip
1 1.2.3.4
1 5.6.7.8
2 10.20.30.40
3 111.222.111.222
3 11.22.33.44
4 1.2.53.43
推荐答案
如果您不介意使用游标,请参见以下示例:
If you don't mind using a cursor, here's an example:
set nocount on;
-- create sample table, @T
declare @T table(id int, ips varchar(128));
insert @T values(1,'1.2.3.4,5.6.7.8')
insert @T values(2,'10.20.30.40')
insert @T values(3,'111.222.111.222,11.22.33.44')
insert @T values(4,'1.2.53.43')
insert @T values(5,'1.122.53.43,1.9.89.173,2.2.2.1')
select * from @T
-- create a table for the output, @U
declare @U table(id int, ips varchar(128));
-- setup a cursor
declare XC cursor fast_forward for select id, ips from @T
declare @ID int, @IPS varchar(128);
open XC
fetch next from XC into @ID, @IPS
while @@fetch_status = 0
begin
-- split apart the ips, insert records into table @U
declare @ix int;
set @ix = 1;
while (charindex(',',@IPS)>0)
begin
insert Into @U select @ID, ltrim(rtrim(Substring(@IPS,1,Charindex(',',@IPS)-1)))
set @IPS = Substring(@IPS,Charindex(',',@IPS)+1,len(@IPS))
set @ix = @ix + 1
end
insert Into @U select @ID, @IPS
fetch next from XC into @ID, @IPS
end
select * from @U
这篇关于如何在MySQL中将逗号分隔的字段扩展为多行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!