我以前使用下面的查询将逗号分隔的字符串转换为行-
select regexp_substr('A,B,C,D','[^,]+', 1, level) from dual connect by regexp_substr('A,B,C,D', '[^,]+', 1, level) is not null;
但是,现在我的分隔符是-‘〜^’
我不能对此定界符使用相同的查询。
select regexp_substr('A~^B~^C~D^E','[^~^]+', 1, level) from dual connect by regexp_substr('A~^B~^C~D^E', '[^~^]+', 1, level) is not null;
我预计 -
柱子
A B C~D^E
请帮忙
或如果提供的定界符为〜^,则有可能获取第n个元素
最好的祝福
简化此方法以拆分字符串,同时允许null:
select regexp_substr('A~^B~^C~D^E','(.*?)(~\^|$)', 1, level, null, 1) from dual connect by level < regexp_count('A~^B~^C~D^E','(.*?)(~\^|$)'); REGEXP_SUBS ----------- A B C~D^E
与链接的答案一样,它会非贪婪地寻找任何字符,然后是~^(插入符号是转义的~\^)或行尾的组合。该regexp_substr()电话还采用了可选的参数指定subexpr-所以只得到了第一组(.*?),而不是分隔符本身,这是在第二组。
~^
~\^
regexp_substr()
subexpr
.*?
如果您想要一个特定的元素,那就更接近链接的帖子了:
select regexp_substr('A~^B~^C~D^E','(.*?)(~\^|$)', 1, 3, null, 1) from dual; REGEX ----- C~D^E
或者在过程中执行此操作时,如果要查看多个集合,请使用connect-by查询填充集合,然后选择所需的元素。