将列拆分为多行

问题描述 投票:4回答:5

我的表的列中包含多个用逗号(,)分隔的值,并希望将其拆分,因此我将earch Site放在其自己的行上,但前面带有相同的Number。

所以我的选择将从此输入中

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:我看到我实际上一直都在选择部分(我曾经是一个cr脚的测试员:(),上面的那个工作正常,但是唯一的问题是它失去了最后一个Site值,但我会尝试工作一个一点..

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

我有一个表,该表的列包含用逗号(,)分隔的多个值,并希望将其拆分,因此我将earch Site放在其自己的行上,但前面具有相同的Number。所以我的选择是...

sql oracle oracle10g tokenize
5个回答
4
投票

正确的答案是。


3
投票

您是否尝试过Michael Sofaer对How to best split csv strings in oracle 9i的回答


2
投票

------------创建结果表--------------------------------- ------------


0
投票

我认为您的最大限制是100个逗号分隔的值,虽然对您的情况可能无害,但这是不必要的。


0
投票

使用交叉连接:

© www.soinside.com 2019 - 2024. All rights reserved.