ORACLE 伪列(level)、rpadlpad、connectby、父节点子节点问题送分系列(一)

ORACLE 伪列(level)、rpadlpad、connectby、父节点子节点问题送分系列(一),第1张

LZ你好

这个rpad是右边填充的意思,但是填充的是

但这个RPAD( ' ', 2*(LEVEL-1), '-' )意思是在空格右侧填充2*(LEVEL-1)个长度的横杠,这个你理解的好像没问题

level开始是从start with开始算起的,你这里就是START WITH UPPERDEPID IS NULL,因为根据父ID,你这个为空的就是最顶层,这个你也可以改成

START WITH UPPERDEPID =0 看下效果

树形结构的意思,我简单给你说一下

家里有爷爷,爷爷有两个儿子,每个儿子又有两个儿子

那么画图出来就是这样

CONNECT_BY_ROOT 从你start with的开始算起,最顶端结点就是总经办,这个你看下查询结果就能看出来

CONNECT_BY_ISLEAF 如果下边还有子节点,就为0,无子节点了就是1,按照我给你发的图,也就是四个孙子下边都没节点了,他们最后都显示1,上边爷爷和儿子都显示0

level,就是爷爷是最顶端,为1,依次类推

给你举例子的图画的难看了点哈,见笑了

晕,你补充了好多啊,你先看吧,哪不懂你再问,我再给你解释

可以的,用connected by level结构实现。

比如:

表结构数据现在是这样:

code   stime   etime

0001   08:00  12:00

0002   14:30  17:30

使用connect by level来得到每30分钟一条记录的结果,如下:

WITH

t

AS

(

SELECT '0001' AS code, '08:00' AS stime, '12:00' AS etime

FROM dual

UNION

SELECT '0002' AS code, '14:30' AS stime, '17:30' AS etime

FROM dual

)

SELECT code, decode(level, 1, stime, to_char(to_date(stime, 'hh24:mi') + 30.0 / 60 / 24 * (level - 1), 'hh24:mi')), decode(level, (to_date(etime, 'hh24:mi') - to_date(stime, 'hh24:mi')) * 24 * 60 / 30, etime, to_char(to_date(stime, 'hh24:mi') + 30.0 / 60 / 24 * level, 'hh24:mi')), level

FROM t

CONNECT BY code = PRIOR(code

AND PRIOR(dbms_random.value IS NOT NULL

AND level <= (to_date(etime, 'hh24:mi') - to_date(stime, 'hh24:mi')) * 24 * 60 / 30))

运行结果

code   stime    etime

0001   08:00   08:30

0001   08:30   09:00

0001   09:00   09:30

0001   09:30   10:00

0001   10:00   10:30

0001   10:30   11:00

0001   11:00   11:30

0001   11:30   12:00

0002   14:30   15:00

0002   15:00   15:30

0002   15:30   16:00

0002   16:00   16:30

0002   16:30   17:00

0002   17:00   17:30  

这是oracle的一个特殊用法,就是生成一个从2010-1-1开始的日期序列:

1/1/2010

1/2/2010

1/3/2010

1/4/2010

1/5/2010

1/6/2010

1/7/2010

1/8/2010

1/9/2010

1/10/2010

1/11/2010

1/12/2010

1/13/2010

1/14/2010

1/15/2010

1/16/2010

1/17/2010

1/18/2010

1/19/2010

1/20/2010

1/21/2010

1/22/2010

1/23/2010

1/24/2010

1/25/2010

1/26/2010

1/27/2010

1/28/2010

1/29/2010

1/30/2010

1/31/2010


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/bake/11633127.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存