ITPUB??ì3
12月微软Hyper-V虚拟化沙龙主题征集
ITPUB论坛 » Oracle开发 » 这样的sql能否写出?

标题: [SQL] 这样的sql能否写出?
离线 wxrwin
一般会员



精华贴数 0
个人空间 0
技术积分 404 (4885)
社区积分 3 (19659)
注册日期 2001-10-18
论坛徽章:0
      
      

发表于 2008-9-18 09:20 
这样的sql能否写出?

比如我有个表,记录是
字段名   a          b           c
对应值   12       3           45;78;9;
用什么样的sql能获得这样的记录:

12  3   45
12  3   78
12 3     9
其中c字段是用;分隔的不定长记录,请大家看看啊!!


只看该作者    顶部
离线 grubbyoo
▃▃,~


来自 夕阳小画
精华贴数 1
个人空间 6
技术积分 1682 (1035)
社区积分 349 (1789)
注册日期 2007-3-1
论坛徽章:15
2008北京奥运纪念徽章:皮划艇静水生肖徽章2007版:鸡2008北京奥运纪念徽章:射箭2008北京奥运纪念徽章:自行车2008北京奥运纪念徽章:手球2008北京奥运纪念徽章:射箭
      

发表于 2008-9-18 09:30 
select a,b,c ,regexp_substr(c,'[^;]+',1,level),level
from
tab
connect by rownum<=length(regexp_replace(c,'[^;]+'))


__________________
走到哪里才不是过客
只看该作者    顶部
在线/呼叫 dingjun123
djゆoracle


来自 china
精华贴数 3
个人空间 0
技术积分 1913 (912)
社区积分 15 (8980)
注册日期 2006-7-28
论坛徽章:2
2008北京奥运纪念徽章:铁人三项ITPUB新首页上线纪念徽章    
      

发表于 2008-9-18 09:38 
PHP code:


create table tmp5 
(id number(2),name varchar2(10),code varchar2(50));

alter table tmp5 add constraint pk_tmp5 primary key (id);

insert into tmp5 values (1,'aaa','c001/c002/c007');

insert into tmp5 values (2,'bbb','c001/c003');

insert into tmp5 values (3,'ccc','c008/c0011/c029/c023');

insert into tmp5 values (4,'ddd','c102/c111/c112/c144/c167');



select id,

name,

--
rn,

--
code,

substr(codestdecode(ed0length(code), ed st)) code

from 
(select id,

name,

code,

rn,

decode(rn11instr(code'/'1rn 1) + 1st,

instr(code'/'1rned

from 
(select *

from tmp5,

(
select rownum rn

from dual

connect by rownum 
<=

(
select max(length(code)) -

max(length(replace(code'/'''))) + 1

from tmp5
))))

where ed 0

or st 1

order by id
rn;

这是三思兄写的,看了一下,能满足你的要求


__________________
软件体系架构要以数据库为中心,如oracle,可以充分利用数据库的特性,帮助解决复杂的问题。一个常用的规则是:
如果能用单条sql解决,ok
如果不能用单条sql解决,考虑使用PL/SQL
如果不能用PL/SQL解决,考虑使用java存储过程
如果不能用java解决,那么考虑使用c外部过程
如果c都解决不了,那么考虑一下放弃吧
只看该作者    顶部
在线/呼叫 jack198409
中级会员


来自 湖北武汉
精华贴数 0
个人空间 484
技术积分 3219 (476)
社区积分 3467 (416)
注册日期 2007-8-10
论坛徽章:35
NBA2008季后赛纪念徽章NBA季后赛之星2008北京奥运纪念徽章:沙滩排球2008北京奥运纪念徽章:沙滩排球2008北京奥运纪念徽章:射箭2008北京奥运纪念徽章:柔道
2008北京奥运纪念徽章:帆船2008北京奥运纪念徽章:排球2008北京奥运纪念徽章:垒球2008北京奥运纪念徽章:摔跤2008北京奥运纪念徽章:举重2008北京奥运纪念徽章:足球

发表于 2008-9-18 09:39 
SQL> with a as (select 12 a,3 b,'45;78;9' c from dual)
  2  SELECT A, B, DECODE(D, 0, SUBSTR(C, E), SUBSTR(C, E, D - E)) C
  3    FROM (SELECT A, B, C, D, LAG(D, 1, 0) OVER(ORDER BY LV) + 1 E
  4            FROM (SELECT A, B, C, INSTR(C, ';', 1, LEVEL) D, LEVEL LV
  5                    FROM A
  6                  CONNECT BY LEVEL <=
  7                             (LENGTH(C) - LENGTH(REPLACE(C, ';', ''))) + 1))
  8  /

         A          B C
---------- ---------- --------------
        12          3 45
        12          3 78
        12          3 9

SQL>


__________________
金麟岂是池中物,一遇风云便化龙!


我的SPACE空间欢迎您!
   


只看该作者    顶部
离线 grubbyoo
▃▃,~


来自 夕阳小画
精华贴数 1
个人空间 6
技术积分 1682 (1035)
社区积分 349 (1789)
注册日期 2007-3-1
论坛徽章:15
2008北京奥运纪念徽章:皮划艇静水生肖徽章2007版:鸡2008北京奥运纪念徽章:射箭2008北京奥运纪念徽章:自行车2008北京奥运纪念徽章:手球2008北京奥运纪念徽章:射箭
      

发表于 2008-9-18 09:44 
create table tmp5 (id number(2),name varchar2(10),code varchar2(50));

insert into tmp5 values (1,'aaa','c001/c002/c007');
insert into tmp5 values (2,'bbb','c001/c003');
insert into tmp5 values (3,'ccc','c008/c0011/c029/c023');
insert into tmp5 values (4,'ddd','c102/c111/c112/c144/c167');

commit

select a.*,regexp_substr(a.code,'[^/]+',1,b.n)
from tmp5 a,
     (select rownum n from dual connect by rownum<100) b
where length(regexp_replace(a.code,'[^/]+'))+1>=b.n


__________________
走到哪里才不是过客
只看该作者    顶部
离线 junsansi
无名扫把


来自 bj
精华贴数 8
个人空间 7925
技术积分 8974 (137)
社区积分 1137 (926)
注册日期 2006-7-17
论坛徽章:93
现任管理团队成员2008北京奥运纪念徽章:举重2008北京奥运纪念徽章:现代五项2008北京奥运纪念徽章:皮划艇静水2008北京奥运纪念徽章:水球2008北京奥运纪念徽章:拳击
生肖徽章2007版:鼠生肖徽章2007版:鼠生肖徽章2007版:鼠生肖徽章2007版:鼠生肖徽章2007版:鼠生肖徽章2007版:鼠

发表于 2008-9-18 09:49 


QUOTE:
原帖由 grubbyoo 于 2008-9-18 09:44 发表
create table tmp5 (id number(2),name varchar2(10),code varchar2(50));

insert into tmp5 values (1,'aaa','c001/c002/c007');
insert into tmp5 values (2,'bbb','c001/c003');
insert into tmp5 values (3,'ccc','c008/c0011/c029/c023');
insert into tmp5 values (4,'ddd','c102/c111/c112/c144/c167');

commit

select a.*,regexp_substr(a.code,'[^/]+',1,b.n)
from tmp5 a,
     (select rownum n from dual connect by rownum=b.n




__________________
我为PUB做贡献: Itpub徽章统计与分析的小工具 出手救市,长期收狗收老鼠:):)~~
============================================
http://www.5ienet.com我爱我佳
扫地不过是我表面上的工作,我真正的身份其实是无名老僧------------------手里那根扫把~~~~
只看该作者    顶部
离线 grubbyoo
▃▃,~


来自 夕阳小画
精华贴数 1
个人空间 6
技术积分 1682 (1035)
社区积分 349 (1789)
注册日期 2007-3-1
论坛徽章:15
2008北京奥运纪念徽章:皮划艇静水生肖徽章2007版:鸡2008北京奥运纪念徽章:射箭2008北京奥运纪念徽章:自行车2008北京奥运纪念徽章:手球2008北京奥运纪念徽章:射箭
      

发表于 2008-9-18 09:51 
回复 #6 junsansi 的帖子

是正则太强大,9i到不支持


__________________
走到哪里才不是过客
只看该作者    顶部
离线 limangdu
初级会员


精华贴数 0
个人空间 0
技术积分 224 (8686)
社区积分 0 (1509279)
注册日期 2007-8-10
论坛徽章:0
      
      

发表于 2008-9-18 10:21 
学习了


只看该作者    顶部
离线 jvkojvko
小马哥


精华贴数 1
个人空间 0
技术积分 6044 (226)
社区积分 61169 (7)
注册日期 2007-9-10
论坛徽章:44
地主之星地主长老紫蜘蛛月度论坛发贴之星ITPUB评论家ITPUB评论家
BLOG每周发帖之星在线时间在线时间   

发表于 2008-9-18 11:01 
这不就是行列转换马?


__________________
马无夜草不肥,人无外财不富。
-------------------------------
小店:http://shop34160316.taobao.com/
欢迎光临,店家是俺GF
只看该作者    顶部
离线 wxrwin
一般会员



精华贴数 0
个人空间 0
技术积分 404 (4885)
社区积分 3 (19659)
注册日期 2001-10-18
论坛徽章:0
      
      

发表于 2008-9-18 11:54 
谢谢 grubbyoo
果然可以!!


只看该作者    顶部
相关内容


CopyRight 1999-2006 itpub.net All Right Reserved.
北京皓辰广域网络信息技术有限公司. 版权所有
E-mail:Webmaster@itpub.net
京ICP证:010037号 联系我们 法律顾问