当你在开发会员系统时,一定会遇到在一个字段中,用逗号或其他符号分隔存储多个信息的情况。例如:保存某个用户的一对多权限时,在权限组这个字段中,就会以逗号分隔保存多个权限编号。
那么,现在假设给出某一个权限编号,要去检索出包含这个权限的所有用户记录集合,该怎么去写这个sql语句呢?分析:这时就需要在逗号分隔的多个权限编号字段中去匹配给出的这个权限编号。如果使用like去做,一则效率不高,二则匹配不。因此用到了逗号分隔列转行的方法。目前该方法只适合在Oracle数据库中使用。该方法只需要sql语句就可以实现列转行。
下面给出该方法的示例:
select a,b,c from
(with test as (select 'aaa' a,'bbb' b,'1,2,3' c from dual)
select a,b,substr(t.ca,instr(t.ca, ',', 1, c.lv) + 1,instr(t.ca, ',', 1, c.lv + 1) - (instr(t.ca, ',', 1, c.lv) + 1)) AS c
from (select a,b,',' || c || ',' AS ca,length(c || ',') - nvl(length(REPLACE(c, ',')), 0) AS cnt FROM test) t,
(select LEVEL lv from dual CONNECT BY LEVEL <= 100) c where c.lv <= t.cnt )
执行以上代码,结果如下图:
模拟数据列c中的内容“1,2,3”被转成了三行,前面两列的内容同时附带过去。在实际运用时,只要把select 'aaa' a,'bbb' b,'1,2,3' c from dual替换成实际需要转换的数据表中的字段即可,其中c字段必须是要进行转换的保存逗号分隔内容的字段。下面的内容都可以不需要更改。其中“LEVEL <= 100”中的数字100代表匹配字段内容中出现逗号的次数,可以自行更改。
本文标题:Oracle逗号分隔列转行匹配多条记录,责任编辑:宏鹏,来源:武汉北大青鸟鲁广校区栏目,于01-24发布于北大青鸟鲁广校区。当你在开发会员系统时,一定会遇到在一个字段中,用逗号或其他符号分隔存储多个信息的情况。例如:保存某个用户的一对多权限时,在权限组这个字段中,就会以逗号分隔保存多个权限编号。
本文地址:https://m.027hpedu.com/html/2219.html
文章标题:Oracle逗号分隔列转行匹配多条记录
上一篇:JAVA批量转换文件编码
下一篇:零基础学习JAVA什么书比较好?
预约将免费领取7天课程体验卡
只为您方便就学
专业老师24小时1对1学习指导
定制专属于你的专属学习方案
微信号:17740513250
微信号:17740513250