`

oralce计算2个日期间的工作日(仅排除周六周日)

阅读更多
参考http://zw7534313.iteye.com/blog/609277#comments
如蓝色粗体所示,否则yk不对

CREATE OR REPLACE FUNCTION GETWORKDAYS (startdate DATE, enddate DATE)
RETURN NUMBER IS
rs INTEGER;
counts INTEGER; --两日期间的天数
weeknum INTEGER; --星期几
yunum INTEGER; --余数
yk INTEGER; --余数中有几天周末

BEGIN
  SELECT FLOOR(enddate-startdate) INTO counts FROM dual; --不包括enddate这一天
  counts:=counts+1; --//包括enddate这一天(加1)
  rs:=counts;
  yk:=0;
 
  SELECT MOD(counts,7) INTO yunum FROM dual;
  SELECT TO_NUMBER(TO_CHAR(startdate,'D')) INTO weeknum FROM dual;
  IF yunum>0 THEN
     BEGIN
           CASE weeknum
           WHEN 6 THEN
              BEGIN
                  IF yunum>1 THEN yk:=2;
                  ELSE yk:=1;
                  END IF;
               END;
           WHEN 1 THEN
                yk:=1;
           ELSE
               BEGIN
                 yk:=yunum-(7-weeknum);
                 IF yk<0 THEN
                    yk:=0;
       ELSE
  yk:=2;

                 END IF;
               END;
       END CASE;
      END;
     END IF;

  rs:=rs-FLOOR(rs/7) *2-yk; --//注意integer 类型的rs/7

  RETURN rs;

  EXCEPTION
     WHEN NO_DATA_FOUND THEN
       NULL;
     WHEN OTHERS THEN
       -- Consider logging the error and then re-raise
       RAISE;
END GETWORKDAYS;
分享到:
评论

相关推荐

    SQL工作日计算,只排除周末

    下面详细解释了如何实现一个SQL函数来计算两个日期之间的有效工作日数量,仅排除周末。 ```sql USE [UnderWritting] GO /****** Object: UserDefinedFunction [dbo].[fn_WorkDay] ScriptDate: 02/20/2013 17:32:07 ...

    oracle sql计算一段时间内(除去周六日)的秒数

    利用 oracle sql 实现 计算一段时间内(除去周六日)的秒数

    使用Oracle的SQL函数实现工作日和节假日分组统计.pdf

    使用Oracle的SQL函数实现工作日和节假日分组统计 本文介绍了使用Oracle的SQL函数来实现工作日和节假日的分组统计,通过对工作日和节假日的判断和统计,可以更好地合理调度人力物力资源,制定节假日劳务补贴政策。...

    oracle函数得到下一个法定工作日期

    在Oracle数据库中,获取下一个法定工作日期是一个常见的需求,尤其在进行日程安排或业务处理时。本篇文章将深入探讨如何使用Oracle内置函数以及自定义函数来实现这一功能。我们将结合具体的代码示例来理解这一过程。...

    计算2个日期相差天数、去除节假日周末

    但是,这仅仅计算了两个日期间的总天数,没有排除周末和节假日。为了实现这一功能,我们需要维护一个节假日列表,通常以数组或容器(如`std::vector`)的形式存储。节假日可以是固定的日期(如新年、国庆节),也...

    计算两个日期之间周末的天数和工作日天数

    本人编写,通过自己定义的函数计算两个日期之间周末的天数和工作日天数,经过测试,非常好用

    2023年日历(标记工作日,节假日,调休,周末),计算两个日期相差的工作日天数

    压缩包里有2个文件,用于计算两个日期相差的工作日天数(排除周末和法定节假日): 1、excel表为2023年日历数据,并且备注工作日、周末,调休、节假日类型,可导入数据库。 2、SQL文件为2023年所有日期的插入SQL,并...

    oracle工作日设置.sql

    通过简单的设置,可查询工作日相关信息。如:今天是本月第几个工作日,今天是本年度第几个工作日,今天之后第N个工作日是哪天,之前的第N个工作日是哪天等。对计算同比,环比,限时办结等需求帮助很大。

    Oracle 计算非工作时间.sql

    Oracle 计算非工作时间(去除周末,自定义节假日,等待时间)

    Oracle数据库的周数计算

    在“WW”格式中,每年的1月1日被视为第一周的开始,而该周的最后一天则是1月1日后的第六天。基于这一定义,我们可以得出以下计算公式: - **每周的第一天**:`date + 周 * 7 - 7` - **每周的最后一天**:`date + 周...

    oracle语句查询两个日期之间星期六、星期日的天数

    oracle语句查询两个日期之间星期六、星期日的天数

    Oracle 获得某日期属于该前月中的第几个自然周

    在Oracle数据库中,计算某个日期属于其前一个月中的第几个自然周是一项常见的需求,这在数据分析、报表生成或业务逻辑处理中很有用。这个任务可以通过编写一个自定义函数来实现,例如提供的`to_week_by_month.fnc`...

    2025年日历excel和Oracle新增sql(标记上班日,周末,节假日)

    2、压缩包内有2个文件: ①.Excel表列举了2025年所有日期,并标记了日期类型(0:工作日 1:周末 2:节假日)。 ②.文本文件内含有关sql,基于Oracle,建表sql,日期数据新增sql,并也标记了日期类型(0:工作日 1:...

    Oracle计算年龄(精确到秒)

    通过入参 生日 ,计算日期(默认sysdate),计算年龄 精确到秒

    使用oracle计算系统当前时间的毫秒数

    2. **转换为自1970年1月1日以来的天数**:接着将`SYSDATE`减去1970年1月1日(使用`TO_DATE`函数)得到的结果表示的是自1970年1月1日至当前日期的时间差(单位是天)。 3. **转换为毫秒数**:由于一天有86400秒,而...

    Oracle日常维护故障定位故障排除

    2. SGA区过大:如果NIT文件中设置的SGA区(System Global Area)过大,可能导致内存不足,使数据库和操作系统都无法正常工作。调整SGA大小以适应系统资源是解决办法。 3. 临时表空间无法扩展:临时表空间满时,...

    计算2000年1月1日到现在有多少月,多少周(四舍五入)。

    根据给定的信息,本文将详细解释如何在Oracle数据库中计算从2000年1月1日至今经过了多少个月和多少个星期,并且结果需要进行四舍五入处理。 ### Oracle数据库中的日期函数 在Oracle数据库中,进行日期计算是非常...

    Oracle 获得某日期属于一年中的第几个自然周

    标题“Oracle 获取某日期属于一年中的第几个自然周”指的是在Oracle数据库系统中,通过SQL查询来确定一个特定日期在当年是第几周的问题。在实际业务中,这样的功能可能用于统计、报告或者数据分析,例如,公司可能...

    oracle ebs 打开成本期间

    该脚本由Oracle官方提供,仅供授权人员使用,并且在运行前需要获得多个级别的审批。脚本的核心目的是重置那些已经标记为“已计算成本”的交易的状态,以便这些交易可以被重新考虑进入成本计算流程。 #### 三、脚本...

    在oracle中利用函数实现计算公式解析(支持括号).txt

    在oracle中利用函数实现计算公式解析|在oracle中利用函数实现计算公式解析

Global site tag (gtag.js) - Google Analytics