新浦京网投站网止,澳门新浦京26999com

    欢迎访问澳门新浦京26999com~

  1. 加入收藏
  2. 设为主页
  3. 学校简介
北大青鸟

三分钟了解北大青鸟

×
  • 北大青鸟大数据课程
  • 北大青鸟网络工程师
  • 北大青鸟web设计专业
  • 北大青鸟PHP专业
  • 北大青鸟启蒙星课程

Oracle逗号分隔列转行匹配多条记录

责任编辑:澳门新浦京26999com来源:澳门新浦京26999com数据库技术教程发布时间:2013-01-24 08:41
导读:当你在开发会员系统时,一定会遇到在一个字段中,用逗号或其他符号分隔存储多个信息的情况。例如:保存某个用户的一对多权限时,在权限组这个字段中,就会以逗号分隔保存多个权限编号。

    当你在开发会员系统时,一定会遇到在一个字段中,用逗号或其他符号分隔存储多个信息的情况。例如:保存某个用户的一对多权限时,在权限组这个字段中,就会以逗号分隔保存多个权限编号。

  那么,现在假设给出某一个权限编号,要去检索出包含这个权限的所有用户记录集合,该怎么去写这个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逗号分隔列转行匹配多条记录,责任编辑:澳门新浦京26999com,来源:武汉宏鹏,于2013年01月24日08时41分发布于澳门新浦京26999com。新浦京网投站网止宏鹏鲁广校区,是北大青鸟武汉电脑学校,专业IT计算机培训,拥有软件/网络/安卓/Web前端/Java课程.北大青鸟地址:光谷广场鲁巷数码港.电话:027-87807717

专业老师指导

专业老师指导

赵老师

从事IT教育培训十年有余,致力于帮助广大学子找到适合自己的专业。

培训咨询客服

培训咨询客服

陈老师

IT培训专业客服,用自己的真诚解决了无数学子的困惑。

本文地址:
文章标题:
  • 北大青鸟Java软件开发
  • 北大青鸟UI设计课程_零基础可学
  • 北大青鸟动漫设计_武汉设计学校
  • 北大青鸟数字艺术_武汉电脑学校
在线咨询
×
在线咨询更多问题

如您有任何疑问
在线咨询随时为您解答或拨打咨询热线:17740513250

×
  • 姓 名*
  • 手 机*
  • QQ号/微信号
  • 所报学科 *
  • 其他备注
  • 温馨提示:请保持手机畅通,咨询老师将为您提供专属的一对一报名服务。