oracle - 如何获取两个日期之间的工作日或小时数

标签 oracle oracle10g

如何计算 Oracle 10g 中两个日期之间的工作时间或天数?

例如我们有两个日期; 14/08/2012 9:30 和 16/08/2012 12:00 工作日工作时间为 09:30 至 18:30。

如何使用 oracle 10g 计算工作时间或工作日(不包括国定假日、周六和周日)?

最佳答案

你不能。就这么简单。世界各地的国定假日各不相同,每年都有所不同,并且可以随时添加或取消额外的假日。此外,一些司法管辖区将周末的国定假日延续到下周;其他人则不然。

您需要创建一个日历表并在其中标记国家假日/周末等。

例如

create table calender
  ( day date
  , weekend varchar2(1)
  , holiday varchar2(1)
    );

然后向其中插入一些数据...

 insert into calender (day, weekend)
 select trunc(sysdate + level)
      , case when to_date(sysdate + level,'fmDAY') in ('SATURDAY','SUNDAY') 
                  then 'Y' else 'N' end
   from dual
connect by level <= 365

最后,手动更新您算作国家法定节假日的日期。

然后,您可以选择工作日,具体取决于您如何使用以下内容填充它:

select count(*)
  from calender
 where day between :startdate and :enddate
   and weekend = 'N'
   and holiday = 'N'

关于oracle - 如何获取两个日期之间的工作日或小时数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11953134/

相关文章:

sql - Oracle RATIO_TO_REPORT 和汇总

java - Oracle9iDialect 可以用于 oracle 12C 吗?

Java + Oracle ORA-1000 超出最大打开游标数

sql - 在 Oracle SQL 中连接 CASE

oracle - 如何在日期上激活触发器

sql - 这个 oracle 查询还能再调优吗?

java - 在日期字段上进行时间范围搜索的 hibernate 条件

java - 遍历oracle中的嵌套表并将对象列表返回给java

sql - 帮助优化 Oracle 查询

sql - 如何在我的表上找到哪些表有外键?