假设截图中的表为t_num_pid (你要 *** 作的表应该没有pid字段吧,我导进去了,供参照),可通过如下语句实现:
select a
,case when length(a||b||c||d||e||f)-2 = 0 then null
else sid - row_number()over( partition by substr(a||b||c||d||e||f ,1,length(a||b||c||d||e||f)-2) order by sid )
end pid
from t_num_pid a
order by sid
;
思路:
1你的每一条记录对应一个sid,相当于一条条的文件路径,
那么最后一个文件节点都有一个父路径,
先用row_number()over( partition by substr(a||b||c||d||e||f ,1,length(a||b||c||d||e||f)-2)
对父路径分组排序,所得的序号即为每个路径最后一个节点sid与其父节点pid的差值,即:pid = sid - 序号 的关系存在。
2
sid - 序号 = 0 时,用 case when end 置为null;
我这边跑的结果:
select aa,ab,ac,ad,ae,af,asid
--,sid - row_number()over( partition by substr(a||b||c||d||e||f ,1,length(a||b||c||d||e||f)-2) order by sid ) pid
,case when length(a||b||c||d||e||f)-2 = 0 then null
else sid - row_number()over( partition by substr(a||b||c||d||e||f ,1,length(a||b||c||d||e||f)-2) order by sid )
end pid
from t_num_pid a
order by sid
;
A B C D E F SID PID
---- ---- ---- ---- ---- ---- ---------- ----------
Q1 1
Q1 W1 2 1
Q1 W1 E1 3 2
Q1 W1 E1 R1 4 3
Q1 W1 E1 R2 5 3
Q1 W1 E1 R3 6 3
S1 7
S1 D1 8 7
S1 D1 F1 9 8
S1 D1 F1 G1 10 9
S1 D1 F1 G2 11 9
S1 D1 F1 G3 12 9
H1 13
H1 J1 14 13
H1 J1 K1 15 14
H1 J1 K1 L1 16 15
H1 J1 K1 L2 17 15
H1 J1 K1 L3 18 15
select months_between(t2rq,trq) 时间差
from t,
(select t,rownum-1 rn from t )t2
where trownum=t2rn;
楼主参考下
如果表中的日期字段是date格式:
select sysdate - 日期字段 from 表名;
如果表中的日期字段是char或者varchar或者varchar2格式:
select sysdate - to_date(日期字段, 'yyyymmdd') from 表名;
select 表1,sysdate-to_date(to_char(表1到达日期,'dd-mm-yy')||表1到达时间,'dd-mm-yyhh24:mi') 时间差,表2 from 表1,表2 where to_date(to_char(到达日期,'dd-mm-yy')||到达时间,'dd-mm-yyhh24:mi')<=sysdate-24/24(读表1,24小时前的数据)where 表1ch=表2ch;
补充:
以后问问题的话,不要这么问,这么问如果不了解情况的话,谁也帮补了你的。
---
以上,希望对你有所帮助。
以上就是关于oracle 计算俩个时间差值的函数全部的内容,包括:oracle 计算俩个时间差值的函数、oracle怎样求相邻行之间的时间差、oracle 日期问题 表中有个日期字段,如何取得当前日期与表中日期的时间差,简单点说就是差多少天等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)