暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 在给定的开始日期和结束日期之间减去日期

ASKTOM 2019-12-07
414

问题描述

嗨,汤姆,
我们有休假管理系统,用户可以选择一个日期范围来安排他的休假。
例如用户a输入日期为2019年5月5日至2019年7月月23日。稍后,他可以取消从2019年5月30日至2019年5月31日的几天。

我如何将他的假期映射为2019年5月5日至2019年5月29日,然后将01-6月-2019映射为23-7月-2019。

用户可以通过给出日期范围来取消一天或多天。

谢谢你的帮助

专家解答

这里有一种解决方法:

每天存储一个用户被安排工作。用一列来说明这是否是假日,例如:

create table employee_work (
  employee_id integer
    not null,
  working_day date
    not null
    check ( working_day = trunc ( working_day ) ),
  is_holiday  integer
    default 0
    not null
    check ( is_holiday in ( 0, 1 ) ),
  primary key (
    employee_id, working_day
  )
);


根据需要加载每个员工的工作日。

有了这个,当他们请求假日运行时:

update employees
set    is_holiday = 1
where  employee_id = :emp
and    working_day between to_date ( :start_dt,  ) 
                   and to_date ( :end_dt,  );


如果他们想取消假期内的天数,请在以下范围内将这些天数设置回 “非假期”:

update employees
set    is_holiday = 0
where  employee_id = :emp
and    working_day between to_date ( :start_dt,  ) 
                   and to_date ( :end_dt,  );


这避免了对现有日期范围进行任何操作的需要。

如果您想向某人显示他们预订的假期,请运行:

select * from employees
where  employee_id = :emp
and    is_holiday = 1

文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论