Oracle 字段值按逗号拆分,变为多行数据
问题原因: 由于数据库中某个字段含有大量数据由逗号开(且多列,逗号个数不固定)
解决办法:
select distinct * from ( select regexp_substr(q.nums, [^,]+, 1, Level,i) order_num, names from ( select 1,2,3 nums, 张三 names from dual union all select 4,5 nums, 李四 names from dual union all select 5,6 nums, 王五 names from dual ) q connect by Level <= LENGTH(q.nums) - LENGTH(REGEXP_REPLACE(q.nums, ,, )) + 1) order by order_num;
重点内容:
REGEXP_SUBSTR函数格式如下: function REGEXP_SUBSTR(String, pattern, position, occurrence, modifier) srcstr :需要进行正则处理的字符串 pattern :进行匹配的正则表达式 position :起始位置,从第几个字符开始正则表达式匹配(默认为1) occurrence :标识第几个匹配组,默认为1 modifier :模式(i不区分大小写进行检索;c区分大小写进行检索。默认为c。) connect by 用法 Oracle中的select语句可以用start with ... connect by prior ...子句实现递归查询,connect by 是结构化查询中用到的,其基本语法是: select ... from where <过滤条件,用于对返回的所有记录进行过滤> start with <根结点的限定语句,当然可以放宽限定条件,以取得多个根结点,实际就是多棵树> connect by [prior] <连接条件,其中用prior表示上一条记录,比如:connect by prior t.id = t.parent_id就是说上一条记录的id 是本条记录的parent_id,即本记录的父亲是上一条记录>
下一篇:
Linux中vim的基本用法总结