国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 開發(fā) > 綜合 > 正文

查出任一年月所含的工作日

2024-07-21 02:34:07
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

  CREATE OR REPLACE FUNCTION Get_WorkingDays(
  ny IN VARCHAR2
  ) RETURN INTEGER IS
  /*------------------------------------------------------------------------------------------
  
  函數(shù)名稱:Get_WorkingDays
  
  中文名稱:求某一年月中共有多少工作日
  
  作者姓名: XINGPING
  
  編寫時(shí)間: 2004-05-22
  
  輸入?yún)?shù):NY:所求包含工作日數(shù)的年月,格式為yyyymm,如200405
  
  返 回 值:整型值,包含的工作日數(shù)目。
  
  算法描述:
  
  1).列舉出參數(shù)給出的年月中的每一天。這里使用了一個(gè)表(ljrq是我的庫(kù)中的一張表。這個(gè)表可以是有權(quán)訪問的、記錄條數(shù)至少為31的任意一張表或視圖)來(lái)構(gòu)造出某年月的每一天。
  
  2).用這些日期和一個(gè)已知星期幾的日期相減(2001-12-30是星期天),所得的差再對(duì)7求模。假如所求年月在2001-12-30以前,那么所得的差既是負(fù)數(shù),求模后所得值范圍為大于-6,小于0,如-1表示星期六,故先將求模的結(jié)果加7,再求7的模.
  
  3).過濾掉結(jié)果集中值為0和6的元素,然后求count,所得即為工作日數(shù)目。
  
  -------------------------------------------------------------------------------------------------*/
  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(nyt.dd,'yyyymmdd') rq
  FROM (SELECT substr(100+ROWNUM,2,2) dd
  FROM ljrq z WHERE Rownum<=31
  ) t
  WHERE to_date(nyt.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;
  ___________________________________
  
  還有一個(gè)版本
  CREATE OR REPLACE FUNCTION Get_WorkingDays(
  ny IN VARCHAR2
  ) RETURN INTEGER IS
  /*-----------------------------------------------------------------------------------------
  函數(shù)名稱:Get_WorkingDays
  
  中文名稱:求某一年月中共有多少工作日
  
  作者姓名: XINGPING
  
  編寫時(shí)間: 2004-05-23
  
  輸入?yún)?shù):NY:所求包含工作日數(shù)的年月,格式為yyyymm,如200405
  
  返 回 值:整型值,包含的工作日數(shù)目。
  
  算法描述:使用Last_day函數(shù)計(jì)算出參數(shù)所給年月共包含多少天,根據(jù)這個(gè)值來(lái)構(gòu)造一個(gè)循環(huán)。在這個(gè)循環(huán)中先求這個(gè)月的每一天與一個(gè)已知是星期天的日期(2001-12-30是星期天)的差,所得的差再對(duì)7求模。假如所求日期在2001-12-30以前,那么所得的差既是負(fù)數(shù),求模后所得值范圍為大于-6,小于0,如-1表示星期六,故先將求模的結(jié)果加7,再求7的模. 如過所得值不等于0和6(即不是星期六和星期天),則算一個(gè)工作日。
  ----------------------------------------------------------------------------------------*/
  Result INTEGER := 0;
  myts INTEGER;   --所給年月的天數(shù)
  scts INTEGER;   --某天距2001-12-30所差的天數(shù)
  rq  DATE;
  djt INTEGER := 1;  --
  BEGIN
  myts := to_char(last_day(to_date(ny,'yyyymm')),'dd');
  LOOP
  rq := TO_date(nysubstr(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;
  
  以上兩個(gè)版本的比較
  
  第一個(gè)版本一條SQL語(yǔ)句就可以得出結(jié)果,不需要編程就可以達(dá)到目的。
但需要使用任意一張有權(quán)訪問的、記錄條數(shù)至少為31的一張表或視圖。
  
  第二個(gè)版本需要編程,但不需要表或者視圖。
  
  這兩個(gè)版本都還存在需要完善的地方,即沒有考慮節(jié)日,如五一、十一、元旦、春節(jié)這些節(jié)假期都沒有去除。這些節(jié)假日應(yīng)該維護(hù)成一張表,然后通過查表來(lái)去除這些節(jié)假日。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 龙江县| 营口市| 孟连| 田林县| 天全县| 区。| 博湖县| 敦煌市| 乌拉特前旗| 中山市| 分宜县| 靖江市| 古蔺县| 湘阴县| 秭归县| 五原县| 泉州市| 宿州市| 溆浦县| 寿光市| 拜泉县| 伊宁市| 延寿县| 横山县| 中江县| 陕西省| 平邑县| 大方县| 吉安市| 当阳市| 如皋市| 京山县| 江都市| 牡丹江市| 德安县| 大丰市| 禹城市| 正阳县| 舒城县| 临邑县| 平昌县|