a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 105|回复: 0

[综合] Oracle辅导:Oracle逗号分隔列转行匹配多条记录问题详解

[复制链接]
发表于 2012-8-4 13:54:49 | 显示全部楼层 |阅读模式
当你在开发会员系统时,必然会碰着在一个字段中,用逗号或其他符号分隔存储多个信息的情形。例如:保留某个用户的一对多权限时,在权限组这个字段中,就会以逗号分隔保留多个权限编号。
$ c! W. d. B# D+ f    那么,此刻假设给出某一个权限编号,要去检索出包含这个权限的所有用户记实集结,该怎么去写这个sql语句呢?剖析:这时就需要在逗号分隔的多个权限编号字段中去匹配给出的这个权限编号。如不美观使用like去做,一则效率不高,二则匹配不切确。是以用到了逗号分隔列转行的体例。今朝该体例只适合在Oracle数据库中使用。该体例只需要sql语句就可以实现列转行。: C8 {7 ~1 ]# a1 i
    下面给出该体例的示例:% }  @2 g* |" p$ k
    select a,b,c from" U" G' |7 G8 t2 i. {6 F) F
    (with test as (select 'aaa' a,'bbb' b,'1,2,3' c from dual)* N+ U1 s; c  E' g$ O. o
    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
3 r4 r4 r6 p9 S& u1 f: l& f    from (select a,b,',' || c || ',' AS ca,length(c || ',') - nvl(length(REPLACE(c, ',')), 0) AS cnt FROM test) t,+ y# ?6 \) R/ U* J# I2 c8 d. I" u9 F
    (select LEVEL lv from dual CONNECT BY LEVEL
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-15 19:57 , Processed in 0.307237 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表