我的表的列中包含多个用逗号(,)分隔的值,并希望将其拆分,因此我将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。所以我的选择是...
正确的答案是。
您是否尝试过Michael Sofaer对How to best split csv strings in oracle 9i的回答
------------创建结果表--------------------------------- ------------
我认为您的最大限制是100个逗号分隔的值,虽然对您的情况可能无害,但这是不必要的。
使用交叉连接: