字符串拆分

qq_40608182 2017-10-24 08:05:02
有如下字符串
abc|def|ghi|
123|456|789|

我想通过|拆分保存表有三个字段的表中,请问大家有什么好办法?
如下:
字段1 字段2 字段3
abc def ghi
123 456 789
...全文
612 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
minsic78 2017-10-25
  • 打赏
  • 举报
回复
如果是在库外的还能方便点,直接sqlldr……
  • 打赏
  • 举报
回复
前面回答得很好了,如果拆分后是变成几行的话在表里面加一个主键列比较好。

with t1 as
(
select 'abc|def|ghi' a ,'ID_1' AS B from dual 
union all 
select '123|456|789','ID_2'  from dual
),
T2 AS(
SELECT B,TRIM(REGEXP_SUBSTR(A,'[^|]+',1,LEVEL))  AS PAR1
 FROM T1
CONNECT BY B = PRIOR B 
 AND PRIOR DBMS_RANDOM.VALUE IS NOT NULL
 AND LEVEL <= length(regexp_replace(A, '[^|]'))+1)
 SELECT * FROM T2 
/*
   	B	PAR1
1	ID_1	abc
2	ID_1	def
3	ID_1	ghi
4	ID_2	123
5	ID_2	456
6	ID_2	789

*/
卖水果的net 2017-10-24
  • 打赏
  • 举报
回复
使用 regexp_substr,这个正好解决你的问题。 先百度一下,有问题再追问。
碧水幽幽泉 2017-10-24
  • 打赏
  • 举报
回复

with tmp as
(
select 'abc|def|ghi' a from dual 
union all 
select '123|456|789' from dual
) 
select substr('|'||a,2,instr(a||'|','|')-1), 
       substr('|'||a,instr(a||'|','|')+2,instr(a||'|','|',1,2)-instr(a||'|','|')-1), 
       substr('|'||a,instr(a||'|','|',1,2)+2,instr(a||'|','|',1,3)-instr(a||'|','|',1,2)-1) 
  from tmp 

10g以上可以试试: 
with tmp as
(
select 'abc|def|ghi' a from dual 
union all 
select '123|456|789' from dual
)
select regexp_replace(a,'(\w+)\|(\w+)\|(\w+)','\1'), 
       regexp_replace(a,'(\w+)\|(\w+)\|(\w+)','\2'), 
       regexp_replace(a,'(\w+)\|(\w+)\|(\w+)','\3')  
  from tmp
qq_40608182 2017-10-24
  • 打赏
  • 举报
回复
在线等,谢谢!

3,491

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧