简体   繁体   English

如何订购以逗号分隔的列表

[英]How to order a comma-separated list

In Oracle, I want to rewrite a column the data like this:在 Oracle 中,我想重写一列数据,如下所示:

2012AName,2019BName,2017DName,2017CName

It's a group by many year+Name order by year desc and name's first char asc after split ',' result like this这是一个按年份 + 名称顺序按年份 desc 和名称的第一个字符 asc 拆分后的分组 ',' 结果如下

2012AName,2017CName,2017CDName,2019BName

Does this fit to your requirement,这是否符合您的要求,

First we split the given string and the aggregate back using listagg and the order by you want.首先,我们使用listagg和您想要的order by拆分给定的字符串和聚合。

with input(str)
as
(
select'2012AName,2019BName,2017DName,2017CName' as str 
  from dual
)
select listagg(split,',') 
within group (order by substr(split,1,4),substr(split,5,1))
  from 
(
select regexp_substr(str,'[^,]+', 1, level) split
  from input 
connect by regexp_substr(str, '[^,]+', 1, level) 
 is not null
)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM