select id, name
from (select SUBSTR(translate(SYS_CONNECT_BY_PATH(translate(t.name,
'-',
'tmp_'),
'-'),
'tmp_',
'-'),
2) name,
t.id,
t.store_id
from allocations t
where t.store_id = 2301
connect by t.father_allocation_id = prior t.id
start with t.father_allocation_id is null)
1.语法:
TRANSLATE(string,from_str,to_str)
示例
Sql代码
1. SELECT TRANSLATE('abcdefghij','abcdef','123456') FROM dual;
2. TRANSLATE (
3. --------------
4. 123456ghij
5.
6. SELECT TRANSLATE('abcdefghij','abcdefghij','123456') FROM dual;
7. TRANSL
8. ----------
9. 123456
补充说明
语法:TRANSLATE(expr,from,to)
expr: 代表一串字符,from 与 to 是从左到右一一对应的关系,如果不能对应,则视为空值。
举例:
select translate('abcbbaadef','ba','#@') from dual (b将被#替代,a将被@替代)
select translate('abcbbaadef','bad','#@') from dual (b将被#替代,a将被@替代,d对应的值是空值,将被移走)
因此:结果依次为:@#c##@@def 和@#c##@@ef
语法:TRANSLATE(expr,from,to)
expr: 代表一串字符,from 与 to 是从左到右一一对应的关系,如果不能对应,则视为空值。
2.其实SYS_CONNECT_BY_PATH这个函数是oracle9i才新提出来的!
它一定要和connect by子句合用!
第一个参数是形成树形式的字段,第二个参数是父级和其子级分隔显示用的分隔符!
START WITH 代表你要开始遍历的的节点!
CONNECT BY PRIOR 是标示父子关系的对应!
这个函数使用之前必须先建立一个树,否则无用
sys_connect_by_path(字段名, 2个字段之间的连接符号),注意这里的连接符号不要使用逗号,oracle会报错,如果一定要用,可以使用replace替换一下,方法如下 REPLACE(字段名,原字符,',')。
树: start with 条件1 connect by prior 条件2
条件1如 子=XX (或父=XX)
条件2 若: 子-->根(倒树) 则为 connect by 子 = prior 根
若 根--> 子(正树) 则 connect 根 = prior 子
树形结构查询
猜你喜欢
转载自lihongtai.iteye.com/blog/2097966
今日推荐
周排行