我在表中有一条只包含一列的记录,其列包含像字符串一样的数据。
d#1001111068#112B#0010040130022013012111505444 ## 20130121110800#20130121115054#01# - ## 240#的用户名的用户名##20130124171831#20130130#6
在#chracters之间,每个字符串在其他表中显示一个列。
D#
1001111068# --Customer Number
112B# --Procut Id
0010040130022013012111505444# --Serial Number
# --Order Number(empty record)
20130121110800# --X Columns
我想解析这些项并插入到其他表中。 怎么写这个。
答案 0 :(得分:1)
您可以通过以下表达式提取第n个子字符串:
regexp_substr(source_string, '([^#]*)(#|$)', 1, n, '', 1)
完整查询:
create table your_table(
source_string varchar2(4000)
);
insert into your_table
values('D#1001111068#112B#0010040130022013012111505444##20130121110800#20130121115054#01#-##240#username#username#20130124171831#20130130#6');
select
n,
regexp_substr(source_string, '([^#]*)(#|$)', 1, n, '', 1)
from your_table,
(
select level as n from dual
connect by level <= (
select max(regexp_count(source_string, '#')) + 1
from your_table
)
)
where n <= regexp_count(source_string, '#') + 1;
输出:
1 D 2 1001111068 3 112B 4 0010040130022013012111505444 5 (null) 6 20130121110800 7 20130121115054 8 01 9 - 10 (null) 11 240 12 username 13 username 14 20130124171831 15 20130130 16 6
答案 1 :(得分:0)
您正在寻找的功能是regexp_substr。