程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> MS SQL2005 中標量值函數的靈活運用之工作日計算篇

MS SQL2005 中標量值函數的靈活運用之工作日計算篇

編輯:關於SqlServer
-----標准節假日   
    
  if   exists   (select   *   from   dbo.sysobjects   where   id   =   object_id(N'[dbo].[f_WorkDay]')   and   xtype   in   (N'FN',   N'IF',   N'TF'))   
  drop   function   [dbo].[f_WorkDay]   
  GO   
    
  --計算兩個日期相差的工作天數   
  CREATE   FUNCTION   f_WorkDay(   
  @dt_begin   datetime,     --計算的開始日期   
  @dt_end     datetime         --計算的結束日期   
  )RETURNS   int   
  AS   
  BEGIN   
  DECLARE   @workday   int,@i   int,@bz   bit,@dt   datetime   
  IF   @dt_begin>@dt_end   
  SELECT   @bz=1,@dt=@dt_begin,@dt_begin=@dt_end,@dt_end=@dt   
  ELSE   
  SET   @bz=0   
  SELECT   @i=DATEDIFF(Day,@dt_begin,@dt_end)+1,   
  @workday=@i/7*5,   
  @dt_begin=DATEADD(Day,@i/7*7,@dt_begin)   
  WHILE   @dt_begin<=@dt_end   
  BEGIN   
  SELECT   @workday=CASE     
  WHEN   (@@DATEFIRST+DATEPART(Weekday,@dt_begin)-1)%7   BETWEEN   1   AND   5   
  THEN   @workday+1   ELSE   @workday   END,   
  @dt_begin=@dt_begin+1   
  END   
  RETURN(CASE   WHEN   @bz=1   THEN   -@workday   ELSE   @workday   END)   
  END   
  GO   
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved