oracle 根据特殊字符将一个字段拆分成多个字段

createtabletest_001(test_idCHAR(6),test_nameVARCHAR2(2000))select*fromtest_001test_id... create table test_001
( test_id CHAR(6),
test_name VARCHAR2(2000))
select * from test_001
test_id test_name

ab0001 ABCD+北京市朝阳区富贵小区3号楼1单元101+100000+平邮

将这个表(test_001)中的test_name 字段根据‘+’拆分,然后存入另一张表,效果如下:

select * from test_003
test_id test_name1 test_name2 test_name3 test_name4

ab0001 ABCD 北京市朝阳区富贵小区3号楼1单元101 100000 平邮

我现在的方法很笨,用下面这个拆出前后部分,然后在不停向下分,有些麻烦,各位有没有什么好办法,谢谢大家了!
select Substr(test_name,1,INSTR(test_name,'+')-1)
from test_001
展开
 我来答
帐号已注销
2015-06-15 · TA获得超过315个赞
知道小有建树答主
回答量:225
采纳率:0%
帮助的人:250万
展开全部

用正则:

SELECT REGEXP_SUBSTR('ABCD+北京市朝阳区富贵小区3号楼1单元101+100000+平邮', '[^+]+', 1, 1),
       REGEXP_SUBSTR('ABCD+北京市朝阳区富贵小区3号楼1单元101+100000+平邮', '[^+]+', 1, 2),
       REGEXP_SUBSTR('ABCD+北京市朝阳区富贵小区3号楼1单元101+100000+平邮', '[^+]+', 1, 3),
       REGEXP_SUBSTR('ABCD+北京市朝阳区富贵小区3号楼1单元101+100000+平邮', '[^+]+', 1, 4)
FROM   DUAL

如果你想要列都自动的话,就需要 table(cast(multiset + pivot

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式