• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 查出任一年月所含的工作日

    發表于:2007-06-22來源:作者:點擊數: 標簽:
    CREATE OR REPLACE FUNCTION Get_WorkingDays( ny IN VARCHAR2 ) RETURN INTEGER IS /*------------------------------------------------------------------------------------------ 函數名稱:Get_WorkingDays 中文名稱:求某一年月中共有多少工作日 作者

       
      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;
      
      以上兩個版本的比較
      
      第一個版本一條SQL語句就可以得出結果,不需要編程就可以達到目的。但需要使用任意一張有權訪問的、記錄條數至少為31的一張表或視圖。
      
      第二個版本需要編程,但不需要表或者視圖。
      
      這兩個版本都還存在需要完善的地方,即沒有考慮節日,如五一、十一、元旦、春節這些節假期都沒有去除。這些節假日應該維護成一張表,然后通過查表來去除這些節假日。

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>