1/8用友股份-LE支持服务业务本部产品方案--《Oracle环境下自定义休假报表解决年假有效期问题》建立日期:2013-12-10修改日期:xxxx-xx-xx文档属性:客户文控编号:LE-DY-CP-2013-10772/8文档控制创建记录适用范围审阅人日期审阅签字所属部门发布范围内部员工伙伴客户发布人姓名所属部门发布时间日期作者所属部门邮件地址版本2013-12-10刘奇产品支持部V1。0版本领域模块备注3/8目录Oracle环境下自定义休假报表解决年假有效期问题............................................4一、需求概述............................................................................................................4二、解决方案............................................................................................................5(一首先做基础表.................................................................................................5)(二基础表结构.....................................................................................................5)(三最终表.............................................................................................................7)三、难点分析............................................................................................................84/8Oracle环境下自定义休假报表解决年假有效期问题注:此解决方案涉及数据库操作或代码操作,请由计算机专业人士操作,并且操作前请做好备份工作!一、需求概述员工休假是按工龄年计算的,不是自然年,目前发现通过系统标准功能难以实现。就是说如果某位员工是2007年3月1日入职,2009年他能够休假的天数,是从2008年3月1日-2009年4月1日之间算的,4月1日之前他没有可以休的年假,4月1日之后才有本年可以休的年假。而4月1日之前休的是08年的年假。拿这个员工来说,用工龄年计算年假,会出现这种情况,4月份休假的时候,如果上年度的工龄可以延长到4月份休假,4月份休假3天,可能1天是08年的,2天是本年的。那么休假的报表就要区别开。5/8二、解决方案首先做基础表(一)基础表结构(二)只需要个人信息与工作信息表连接即可,下面是选择的字段。年假开始:6/8年假结束:实现效果:7/8主要原理:利用开始结束日期同当前日期进行比较。最终表(三)利用casewhen来判断得出结果即可。8/8三、难点分析在Oracle中对日期型的处理比较复杂如年假结束日期:to_char((to_date((to_char(getdate(),'yyyy')||'-'||substring(bd_psnbasdoc.joinsysdate,6,2)||'-'||substring(bd_psnbasdoc.joinsysdate,9,2)),'yyyy-mm-dd')-1),'yyyy-mm-dd')需要做多次类型转换才能达到预期效果。