sql 计算SQL中的天数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql 计算SQL中的天数相关的知识,希望对你有一定的参考价值。

/****** Object:  UserDefinedFunction [dbo].[CalcManfDays]    Script Date: 10/15/2008 09:49:34 ******/  
 SET   ANSI_NULLS   ON  
 GO  
 SET   QUOTED_IDENTIFIER   ON  
 GO  

 ALTER   function [dbo].[CalcManfDays]  (@DATE_START datetime, @DATE_END datetime)  
 returns   NUMERIC   (10,2)  
 AS  
       BEGIN  
      DECLARE   @RESULT   NUMERIC   (10,2)   --, @SHIFTSTART as int, @SHIFTEND as int  
      --set @SHIFTSTART = 7  
      --set @SHIFTEND = 23  

 --  --ADJUST IF START BEFORE SHIFT  
 --  if datepart(hh,@DATE_START) < @SHIFTSTART  
 --  begin  
 --  set @DATE_START = dateadd(hh,((@SHIFTSTART - 1) - datepart(hh,@DATE_START)),@DATE_START)  
 --  set @DATE_START = dateadd(n,(60-datepart(n,@DATE_START)),@DATE_START)  
 --  end  

 --  --ADJUST IF START AFTER SHIFT  
 --  if datepart(hh,@DATE_START) > @SHIFTEND  
 --  begin  
 --  set @DATE_START = dateadd(hh,(@SHIFTSTART-datepart(hh,@DATE_START)),@DATE_START)  
 --  set @DATE_START = dateadd(n,-(60-datepart(n,@DATE_START)),@DATE_START)  
 --  set @DATE_START = dateadd(dd,1,@DATE_START)  
 --  end  

      --CALC WORKDAY BY HRS(DECIMAL)  
      SET   @RESULT   =    CONVERT   (   NUMERIC   (10,2),datediff(hh,@DATE_START,@DATE_END)   -   48   *   datediff(ww,@DATE_START,@DATE_END)  
          +    CASE    WHEN   datepart(dw,@DATE_START)   =   1   OR   datepart(dw,@DATE_END)   =   7   THEN    -   24  
          WHEN   datepart(dw,@DATE_START)   =   7   OR   datepart(dw,@DATE_END)   =   1   THEN    +   24  
          ELSE   0 end)   /   24  

      --ADJUST FOR HOLIDAYS  
      SET   @RESULT   =   @RESULT   -   (SELECT   COUNT   ([DATE_HOLIDAY])  
           FROM (SELECT [DATE_HOLIDAY]  
           FROM [TCM_Replica].[dbo].[tblProdControl_Schedule_Holidays_USA]  
           WHERE [DATE_HOLIDAY]   BETWEEN    CONVERT   (VARCHAR(10),@DATE_START,120)   AND    CONVERT   (VARCHAR(10),@DATE_END,120)  
             UNION  
           SELECT [DATE_HOLIDAY]  
           FROM [TCM_Replica].[dbo].[tblProdControl_Schedule_Holidays_MTY]  
           WHERE [DATE_HOLIDAY]   BETWEEN    CONVERT   (VARCHAR(10),@DATE_START,120)   AND    CONVERT   (VARCHAR(10),@DATE_END,120))A)  

   IF @RESULT   <   0  
       BEGIN  
       SET   @RESULT   =   0  
       END  
     
   RETURN @RESULT  
     END  


      --CALC WORKDAY BY DAYS(INT)  
      --select datediff(dd,@DATE_START,@DATE_END)-2*datediff(ww,@DATE_START,@DATE_END)  
      --  + case when datepart(dw,@DATE_START)=1 or datepart(dw,@DATE_END)=7 then -1  
      --  when datepart(dw,@DATE_START)=7 or datepart(dw,@DATE_END)=1 then +1  
      --  else 0 end 

以上是关于sql 计算SQL中的天数的主要内容,如果未能解决你的问题,请参考以下文章

SQL是计算两个日期相差多少天数的函数?

SQL 计算两个日期相差多少天数的函数

查找逾期天数的 SQL 窗口函数

SQL:连续天数的计算方法

SQL 计算连续天数

sql 如何使用SQL计算日历季度的剩余天数