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'

结果:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值