将一个字段中以符号分隔的多个数字进行排序显示

本文介绍了如何使用SQL中的LISTAGG和SUBSTR函数来处理包含多个元素的字符串列表,通过解析字符串并按指定顺序排列元素,实现数据的高效聚合与展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

如图,要将my_list 列变为 my_list2 列 ,测试数据如下


CREATE TABLE test_num
(my_LIST VARCHAR2(125));


insert into test_num (MY_LIST)
values ('1,4');
insert into test_num (MY_LIST)
values ('9,2,1');
insert into test_num (MY_LIST)
values ('2,4,1,');
insert into test_num (MY_LIST)
values ('1,4,6');
insert into test_num (MY_LIST)
values ('7');
insert into test_num (MY_LIST)
values ('8,1');
insert into test_num (MY_LIST)
values ('7,5,3,2');


查询语句如下:


SELECT MY_LIST,LISTAGG(STR,',') WITHIN GROUP(  ORDER BY STR)MY_LIST2 FROM (
SELECT DISTINCT MY_LIST,SUBSTR(COLNAME,INSTR(COLNAME, ',',1,LEVEL)+1,
                      INSTR(COLNAME,',',1,LEVEL+1)-
                      INSTR(COLNAME,',',1,LEVEL)-1)STR              
FROM (SELECT MY_LIST,','||MY_LIST||',' AS COLNAME FROM test_num)
CONNECT BY LEVEL<LENGTH(COLNAME)-LENGTH(REPLACE(COLNAME,','))
) GROUP BY MY_LIST;



SELECT (SELECT LISTAGG(REGEXP_SUBSTR(MY_LIST, '[^,]+', 1, LEVEL), ',') WITHIN GROUP(ORDER BY TO_NUMBER(REGEXP_SUBSTR(MY_LIST, '[^,]+', 1, LEVEL)))
          FROM DUAL CONNECT BY REGEXP_SUBSTR(MY_LIST, '[^,]+', 1, LEVEL) IS NOT NULL) AA
  FROM test_num;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值