最近在开发时,遇到报表统计,客户要求按照工作日口径来进行统计,查看了oracle函数后,没有改功能,加上网上搜索的资料,决定自己开发一个服务器端函数,快速帮
助我们来计算工作日天数,另外需创建一张表,用以保存每个年度的节假日。
函数如下:
CREATE OR REPLACE FUNCTION GET_WORKDAY(STARTDATE IN VARCHAR2,
ENDDATE IN VARCHAR2) RETURN NUMBER IS
V_OLDDATE DATE := TO_DATE(STARTDATE, 'yyyy-mm-dd');
V_NEWDATE DATE := TO_DATE(ENDDATE, 'yyyy-mm-dd');
V_COUNT NUMBER;
V_NUM NUMBER;
BEGIN
SELECT COUNT(1)
INTO V_COUNT
FROM (SELECT V_OLDDATE + ROWNUM - 1 RN
FROM DUAL
CONNECT BY ROWNUM <= V_NEWDATE - V_OLDDATE + 1) tt
WHERE TO_CHAR(tt.RN, 'D') NOT IN ('1','7')
AND NOT EXISTS (SELECT 1
FROM TB_SLM_HOLIDAY A
WHERE TO_CHAR(A.HOLIDAY, 'yyyy-mm-dd') =
TO_CHAR(tt.RN, 'yyyy-mm-dd') AND a.flag='1');
DBMS_OUTPUT.PUT_LINE(V_COUNT);
SELECT COUNT(1) INTO v_num FROM tb_slm_holiday b WHERE b.holiday>=V_OLDDATE AND b.holiday<=V_NEWDATE AND b.flag='0';
v_count:= v_count+v_num;
RETURN V_COUNT;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('没有查到数据');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('其它异常');
END;小弟也是刚开始编写oracle函数,如有不对,请各位指导。
在报表统计需求中,面对客户关于工作日口径的统计要求,开发者利用Oracle创建了一个自定义函数,以计算两个日期间的工作日天数。此外,为确保准确性,还建立了一张表用于存储每年的节假日信息。
2656

被折叠的 条评论
为什么被折叠?



