求一个简单的算法,写一个函数,返回出3个时间段的交集!

LA003 2004-11-17 05:41:34
需要一个函数,输入参数是 6个日期型的变量,
A1, B1 ; A2, B2 ; A3 ,B3
返回出他们3个时间段的共同的交集,想了半天,没有什么特别好的方法,特来求高人们赐教啊!
...全文
211 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
ORARichard 2004-11-18
  • 打赏
  • 举报
回复
越写越全了啊,呵呵
skystar99047 2004-11-18
  • 打赏
  • 举报
回复
create or replace function getmidtime(
A1 date,
B1 date,
A2 date,
B2 date,
A3 date,
B3 date
) return number
as
v_h number;
v_a date;
v_b date;
begin
if A1>A2 then v_a:=A1; else v_a:=A2; end if;
if A3>v_a then v_a:=A3;end if;
if B1<B2 then v_b:=B1;else v_b:=B2;end if;
if B3<v_b then v_b:=B3;end if;
if v_a<v_b then return (v_b-v_a)*24;esle return null;end if;
end;
/
kzy7517 2004-11-17
  • 打赏
  • 举报
回复
附日期大小比较规则

Date Values
A later date is considered greater than an earlier one. For example, the date equivalent of '29-MAR-1997' is less than that of '05-JAN-1998' and '05-JAN-1998 1:35pm' is greater than '05-JAN-1998 10:09am'.

kzy7517 2004-11-17
  • 打赏
  • 举报
回复
在3个A中找到最大值,在3个B中找到最小值。用B的最小值减A的最大值就得到结果。
SELECT (LEAST(B1,B2,B3) - GREATEST (A1, A2, A3))*24 into v_time FROM DUAL;

GerryYang 2004-11-17
  • 打赏
  • 举报
回复
最大值和最小值之间的差就是了
ORARichard 2004-11-17
  • 打赏
  • 举报
回复
max(a1,a2,a3) t1
min(b1,b2,b3) t2
if t1>t2 return null
if t1<=t2 retrun t1至t2

就是这个意思,至于语句自己写吧
lialin 2004-11-17
  • 打赏
  • 举报
回复
如果是1小时的话,应该是三个时间段中最小时间的最大值与最大时间的最小值之间的差就应该是你要的东东了吧!
lialin 2004-11-17
  • 打赏
  • 举报
回复
也应该是两个小时吧,你的第一个是2个小时,第二个是5个小时,第三个是2个小时,交集不是2个小时吗???
LA003 2004-11-17
  • 打赏
  • 举报
回复
哦,不好意思呵... 是我没有表述清楚啊, 我要的是相交的结果,是时间的长度来着
比如说我输入的参数
8:00 10:00 第一个时间段
7:00 12:00 第二个时间段
9:00 11:00 第三个时间段


这样,返回的结果是 1 小时

我要的就是这个 1 小时这个东西.谢谢各位高人阿!
lialin 2004-11-17
  • 打赏
  • 举报
回复
排一下序,找出到三个和第四个,两个之间的就是他们的交集了吧!
不知道你怎么返回呢,这是一个范围呀!

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧