当你在开发会员系统时,一定会遇到在一个字段中,用逗号或其他符号分隔存储多个信息的情况。例如:保存某个用户的一对多权限时,在权限组这个字段中,就会以逗号分隔保存多个权限编号。
那么,现在假设给出某一个权限编号,要去检索出包含这个权限的所有用户记录集合,该怎么去写这个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代表匹配字段内容中出现逗号的次数,可以自行更改。
- 数据库技术之简要分析SQL Server表的占用容量大小
- mysql数据库存储IP地址省空间的方法
- 实现oracle数据库插入excel数据
- mysql 无法联接的原因及处理方法
- 7个使用比较广泛的HTML5视频音频播放器
- SQL是什么?SQL是什么意思?
- 关于mysql主从配置的一些总结知识
- MySQL数据库查询超时问题解决
- 北大青鸟数据库技术 1433映像劫持后门提权
- 云顶国际 为什么要学习云计算?
看过该数据库技术教程的还看过
本文标题:Oracle逗号分隔列转行匹配多条记录,责任编辑:云顶国际登录官网,来源:武汉宏鹏,于2013年01月24日08时39分发布于云顶国际登录官网。武汉云顶国际登录官网专注计算机电脑IT编程培训。学校专注java培训,ui设计培训,web前端培训,python培训,大数据培训等,北大青鸟学校累计为企业培养和输送IT专业人才85万。