【发布时间】:2010-09-14 21:37:53
【问题描述】:
我有一个表格,其中有一列包含多个用逗号 (,) 分隔的值,我想将其拆分,以便将每个站点放在自己的行上,但前面的数字相同。
所以我的选择会来自这个输入
table Sitetable
Number Site
952240 2-78,2-89
952423 2-78,2-83,8-34
创建此输出
Number Site
952240 2-78
952240 2-89
952423 2-78
952423 2-83
952423 8-34
我发现了一些我认为可行但不行的东西..
select Number, substr(
Site,
instr(','||Site,',',1,seq),
instr(','||Site||',',',',1,seq+1) - instr(','||Site,',',1,seq)-1) Site
from Sitetable,(select level seq from dual connect by level <= 100) seqgen
where instr(','||Site,',',1,seq+1) > 0
Edit2:我看到我实际上一直有一个部分工作选择(我是一个糟糕的测试人员:(),上面的工作但唯一的问题是它丢失了最后一个站点值但我会尝试工作有点那个..
Edit3:现在可以工作了
select Number, substr(
Site,
instr(','||Site,',',1,seq),
instr(','||Site||',',',',1,seq+1) - instr(','||Site,',',1,seq)-1) Site
from Sitetable,(select level seq from dual connect by level <= 100) seqgen
where instr(','||Site,',',1,seq) > 0
【问题讨论】:
-
查看我对我确定为可能重复的另一篇 SO 帖子的回答。它是您的问题的 10g 解决方案。
-
我认为我的选择现在工作得更好了
-
有没有办法在 SQL Server 2008 中做到这一点??
标签: sql oracle oracle10g tokenize