使用(Oracle)SQL对字符串中的分隔分隔值进行排序

fil*_*ppo 1 sorting string oracle plsql oracle10g

说你有

select '9|2|6|7|5' as somedata from dual
Run Code Online (Sandbox Code Playgroud)

有没有办法,我可以做以下事情:

select
    in_string_sort('|', a.somedata)
from
    (select '9|2|6|7|5' as somedata from dual) a
Run Code Online (Sandbox Code Playgroud)

结果会是'2|5|6|7|9'什么?

我知道,我可以使用一个函数来实现它,但这是如此基本我想知道Oracle是否会为这类事情提供一些内置函数.

[编辑]忘记提及:这将在Oracle 10gR2中.

小智 6

据我所知,没有这样的内置功能.你没有说哪个版本,所以我假设11g.此查询应该为您执行:

  1  select listagg(somedata, '|') within group (order by somedata) somedata from (
  2  with q as (select '|'||'9|2|6|7|5' as somedata from dual)
  3  select substr(somedata, instr(somedata, '|', 1, rownum) + 1, 1) somedata
  4    from q,
  5     (select 1 from q connect by level <= length(regexp_replace(somedata, '[0-9]', '')))
  6* )

SOMEDATA
------------------------------
2|5|6|7|9
Run Code Online (Sandbox Code Playgroud)

  • 检查链接问题的已接受答案,以获取有关如何在Oracle 10中执行listagg的说明:http://stackoverflow.com/questions/468990/how-can-i-combine-multiple-rows-into-a-comma-delimited -list-在甲骨文 (2认同)