在Oracle中使用regexp_substr按顺序分割字符串

nav*_*igh 1 sql oracle oracle11g

我在Oracle数据库中有一个字符串,我的字符串是:'bbb;aaa;qqq;ccc'

我使用正则表达式来分割我的字符串:

select distinct trim(regexp_substr('bbb;aaa;qqq;ccc','[^;]+', 1,level) ) as q 
from dual
connect by regexp_substr('bbb;aaa;qqq;ccc', '[^;]+', 1, level) is not null ;
Run Code Online (Sandbox Code Playgroud)

我想按顺序分割它,我总是期望以下输出:

bbb
aaa
qqq
ccc
Run Code Online (Sandbox Code Playgroud)

因为子字符串的顺序对我来说非常重要。但此查询的结果不按顺序排列:

qqq
aaa
bbb
ccc
Run Code Online (Sandbox Code Playgroud)

Ale*_*sej 5

你不需要 aDISTINCT来得到你的结果;此外,要按给定顺序获得结果,您只需要一个ORDER BY子句:

select trim(regexp_substr('bbb;aaa;qqq;ccc','[^;]+', 1,level) ) as q 
from dual
connect by regexp_substr('bbb;aaa;qqq;ccc', '[^;]+', 1, level) is not null
order by level
Run Code Online (Sandbox Code Playgroud)