oracle数据库时间拆分,[数据库]oracle处理考勤时间,拆分考勤时间段的sql语句

[数据库]oracle处理考勤时间,拆分考勤时间段的sql语句

0 2015-06-21 00:00:19

最近一直在用mysql数据库做云项目,有段时间没有接触oracle了,昨天有朋友叫我帮忙用oracle处理一个考勤记录的需求,我在考虑如何尽量精简实现上面花了一段时间。于是把这个实现做个记录。

需求如下:rownum为奇数的为进厂时间,偶数的为离场时间

第一个奇数行的时间被第一个偶数行相减,以此类推

将上面两步产生的时间结果集相加得出总时间作为当天考勤时间

最终能和别的表联合起来形成这样的展示:

人员日期工时入厂时间出厂时间

张三2015/6/189小时30分钟8:00:0010:30:00

11:00:0012:30:00

13:30:0017:30:00

18:00:0018:30:00

19:00:0019:30:00

20:00:0020:30:00

李四……....

要我实现的是如何把时间一列的数据拆分成为两列来显示:

原来一列是这样的:

bc91bb04e6e9c61e24c974e4440db8f2.gif

要实现的拆分的效果是这样的:

bc91bb04e6e9c61e24c974e4440db8f2.gif

实现方式如下:

首先创建一个时间表(当然这里我关注的只是scan_time这个字段,其他字段不用理会):create table CMIS_PERSON_FI_DETAIL_TB( detail_id NUMBER(20) not null, scan_time DATE, person_fk_id NUMBER(20) not null)

其次,插入数据,插入数据之后的效果是这样的:

bc91bb04e6e9c61e24c974e4440db8f2.gif

最后编写sql进行实现,实现的sql语句如下所示:select max(a) in_time, max(b) out_time from (select decode(mod(rownum, 2), 1, scan_time) a, decode(mod(rownum, 2), 0, scan_time) b, round(rownum / 2) c from CMIS_PERSON_FI_DETAIL_TB) group by c order by c;

努力 !加油!

转载请保留本文网址:http://www.shaoqun.com/a/121111.html

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:admin@shaoqun.com。

sql

0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值