oracle逗号怎么分配 oracle以逗号分隔

oracle如何拆分以逗号分隔的字符串为多列

oracle 中可以用connect by把字符串按都好分割:

创新互联专业为企业提供高台网站建设、高台做网站、高台网站设计、高台网站制作等企业网站建设、网页设计与制作、高台企业网站模板建站服务,十余年高台做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。

比如定义字符串:

pv_no_list :='23,34,45,56';

SELECT DISTINCT REGEXP_SUBSTR (pv_no_list,'[^,]+',1,LEVEL) as "token"

FROM DUAL

CONNECT BY REGEXP_SUBSTR (pv_no_list,'[^,]+',1,LEVEL) IS NOT NULL

order by 1

返回结果:

TOKEN

23

34

45

56

oracle 如何将一个字段由逗号分割成多行

select b,

t.ca,

c.lv,instr(t.ca, ',', 1, c.lv) + 1,

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 b,

',' || c || ',' AS ca,

c,

LENGTH(C),

length(c || ','),

REPLACE(c, ','),

length(REPLACE(c, ',')), --删除逗号的长度

nvl(length(REPLACE(c, ',')), 0), --空值长度为空,因此要将空值替换为0

length(c || ',') - nvl(length(REPLACE(c, ',')), 0) AS cnt --以逗号分隔的字符串个数,先在原来的长度上加1 计算去除所有逗号后字符串长度,再,拿这个

FROM TEST_A) t,

(select LEVEL lv from dual CONNECT BY LEVEL = 100) c

where c.lv = t.cnt --逗号数量在100以内

oracle 逗号分隔查询

这个用过程完成比较好,这样的话可以写几个循环,然后一个循环一个循环的来做,比较好解释和控制,而且写得量应该可不大。判断下instr(字符串,n)的位置然后进行截取,以及判断是否为0等,就可以进入和跳出循环。外层则可以是一个游标。遍历class表。这样就可以了。

如果硬要写一个sql,那么这里才几个逗号,如果逗号很大,那么可能要写很多的decode或者case when,而且不是十分好控制。假如有最多21个逗号,那么你就要写22个decode。这个工作量有点大了吧。

写完后,进行行转列,找到username,然后用wm_concat,username合并或者用,最后在根据查到表的id和class的id进行对应,得到查询结果,可是似乎有点太麻烦了。

我尝试用start with做,可是没办法实验,不知道行不行,感觉上似乎可以,但是总觉得哪里不对。


本文名称:oracle逗号怎么分配 oracle以逗号分隔
文章出自:http://ybzwz.com/article/hpiedh.html