Oracle--表中时间段拆分的问题解决

今天碰到的问题:

一张请假表.有请假人,请假开始时间,结束时间.

需求:统计从某时间段-某时间段.请假的人

问题点.需要从某个时间段,截取出某个时间段,做筛选.

比如:一个人从8月9号请假到8月23号销假.我要查询8月1号-8月10日请过假的人.如果用平时时间筛选,是做不到的.

解决:将请假到销假这个时间段拆分具体到日.然后通过时间段筛选日.

如何拆分?

1.建时间段虚表(关键)

例如(2018-10-26到 2018-11-25):

 select date '2018-10-26' + (rownum - 1) dt from dual connect by rownum <= (date '2018-11-25' - date '2018-10-26' )

执行结果:

2.外连接关联时间段.

select distinct w2.personid,'3' type,'请假详细信息' title, 
   to_date(to_char(w1.dt,'yyyy/mm/dd') || ' 00:00:00','yyyy/mm/dd hh24:mi:ss') , 
   to_date( to_char(w1.dt,'yyyy/mm/dd')||' 23:59:59','yyyy/mm/dd hh24:mi:ss'), 24 time 
   from (select date '2018-10-26' + (rownum - 1) dt from dual
   connect by rownum <= (date '2018-11-25' - date '2018-10-26' + 1)) w1
   inner join (select personid, leavedate, backdate  from jcyy.z_jcyy_personholiday) w2
   on w1.dt between w2.leavedate and w2.backdate where w2.personid = '1275000023739'

结果:

猜你喜欢

转载自blog.csdn.net/weixin_40648180/article/details/84885830