将一个字段中以符号分隔的多个数字进行排序显示
2016-05-11 10:48
597 查看
如图,要将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;
相关文章推荐
- pip 安装其他工具报错处理
- 深入 Linux 的进程优先级
- java 键盘输入数据
- Android性能优化
- c++11时间函数
- Android Handler消息处理机制详解
- 一个关于Java的装箱与拆箱的bug
- SDRAM的机理
- javaoop---jdbc 入门级别
- JAVA。String转Int
- SSM框架——使用MyBatis Generator自动创建代码
- C/C++中一维与多维数组
- 如何在MySQL中设置外键约束以及外键的作用
- 上传文件并读取excel总结
- Swift UIButton用法
- apache sqoop1.99.3+hadoop2.5.2+mysql5.0.7环境构筑以及数据导入导出
- bzoj 4033: [HAOI2015]T1(树形DP)
- 安卓动画
- 图片轮播所遇到的问题
- android 网络加载图片,对图片资源进行优化,并且实现内存双缓存 + 磁盘缓存