导航

上海网站建设

专业的网站建设,上海网站建设中心,我们有最专业的团队与最优秀的网站设计人才,选择我们就是选择成功!站长联系电话:(021)68046287 / 68046297 QQ:450591584 EMAIL:shwebc@gmail.com我们提供的服务:
网站建设,网站优化,网站维护,空间域名,企业邮局

关键字:上海网站建设网站排名网页制作网站建设网页设计网站优化上海WAP建站

« SQLServer连接失败错误分析与排除Oracle中的数据字典技术初级入门 »

两种方法分析每月工作日计算程序

DIV class=guanggao>SQL> SELECT TEXT FROM USER_SOURCE WHERE TYPE='PROCEDURE' AND NAME='GZR';    TEXT                                                  ----------------------------------------------------------------------------------------------------  procedure gzr(v_nowdate in varchar2) as                                 v_firstsaturday varchar2(10);                                      v_outdate date;                                             v_countworkday number(10);                                       begin                                                        select to_char(next_day(to_date(concat(v_nowdate,'01'),'yyyymmdd'),1)-1,'dd')                into v_firstsaturday                                              from sys.dual;                                             v_countworkday:=to_number(v_firstsaturday)-1;                              loop                                                   v_outdate:=to_date(concat(v_nowdate,v_firstsaturday+7),'yyyymmdd');                   if v_outdate yyymm'),'01'),'yyyymmdd') then                                                                                            v_countworkday:=v_countworkday+5;                                    else                                                  v_countworkday:=v_countworkday+5-to_number(v_outdate-to_date(concat(to_char(add_months(sysdate  ,1),'yyyymm'),'01'),'yyyymmdd'));                                                                                          end if;                                                exit when v_outdate>=to_date(concat(to_char(add_months(sysdate,1),'yyyymm'),'01'),'yyyymmdd');      TEXT    CREATE OR REPLACE FUNCTION Get_WorkingDays(   ny IN VARCHAR2  ) RETURN INTEGER IS     /*------------------------------------------------------------------------------------------  函数名称:Get_WorkingDays  中文名称:求某一年月中共有多少工作日  作者姓名: XINGPING  编写时间: 2004-05-22  输入参数:NY:所求包含工作日数的年月,格式为yyyymm,如200405  返 回 值:整型值,包含的工作日数目。  算法描述:    1).列举出参数给出的年月中的每一天。这里使用了一个表(ljrq是我的库中的一张表。这个表可以是有权访问的、记录条数至少为31的任意一张表或视图)来构造出某年月的每一天。    2).用这些日期和一个已知星期几的日期相减(2001-12-30是星期天),所得的差再对7求模。如果所求年月在2001-12-30以前,那么所得的差既是负数,求模后所得值范围为大于-6,小于0,如-1表示星期六,故先将求模的结果加7,再求7的模.    3).过滤掉结果集中值为0和6的元素,然后求count,所得即为工作日数目。     -------------------------------------------------------------------------------------------------*/    Result INTEGER;  BEGIN   SELECT COUNT(*) INTO Result    FROM (SELECT MOD(MOD(q.rq-to_date('2001-12-30','yyyy-mm-dd'),7),7) weekday        FROM ( SELECT to_date(ny||t.dd,'yyyymmdd') rq             FROM (SELECT substr(100+ROWNUM,2,2) dd                  FROM ljrq z WHERE Rownum<=31               ) t             WHERE to_date(ny||t.dd,'yyyymmdd')               BETWEEN to_date(ny,'yyyymm')                 AND last_day(to_date(ny,'yyyymm'))           )q       ) a      WHERE a.weekday NOT IN(0,6);     RETURN Result;   END Get_WorkingDays;    CREATE OR REPLACE FUNCTION Get_WorkingDays(   ny IN VARCHAR2  ) RETURN INTEGER IS   /*-----------------------------------------------------------------------------------------  函数名称:Get_WorkingDays  中文名称:求某一年月中共有多少工作日  作者姓名: XINGPING  编写时间: 2004-05-23  输入参数:NY:所求包含工作日数的年月,格式为yyyymm,如200405  返 回 值:整型值,包含的工作日数目。  算法描述:使用Last_day函数计算出参数所给年月共包含多少天,根据这个值来构造一个循环。在这个循环中先求这个月的每一天与一个已知是星期天的日期(2001-12-30是星期天)的差,所得的差再对7求模。如果所求日期在2001-12-30以前,那么所得的差既是负数,求模后所得值范围为大于-6,小于0,如-1表示星期六,故先将求模的结果加7,再求7的模. 如过所得值不等于0和6(即不是星期六和星期天),则算一个工作日。     ----------------------------------------------------------------------------------------*/    Result INTEGER := 0;   myts INTEGER;   --所给年月的天数   scts INTEGER;   --某天距2001-12-30所差的天数   rq  DATE;   djt INTEGER := 1;  --   BEGIN   myts := to_char(last_day(to_date(ny,'yyyymm')),'dd');    LOOP     rq := TO_date(ny||substr(100+djt,2),'yyyymmdd');    scts := rq - to_date('2001-12-30','yyyy-mm-dd');    IF MOD(MOD(scts,7)+7,7) NOT IN(0,6) THEN     Result := Result + 1;    END IF;    djt := djt + 1;     EXIT WHEN djt>myts;   END LOOP;    RETURN Result;   END Get_WorkingDays; document.write(""); document.getElementById("contentAdv").innerHTML=document.getElementById("span_ad3").innerHTML; document.getElementById("span_ad3").innerHTML=""; 文章搜索

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

Powered By Z-Blog .Templete from Google黑板报

Copyright 上海网站建设 沪ICP备07037033号 Some Rights Reserved.