zoukankan      html  css  js  c++  java
  • 一个高手的SQL求工作天数的函数

    CREATE FUNCTION dbo.fun_GetWorkDay
    (
         @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

    执行这个自定函数: 

    select   dbo.fun_GetWorkDay('2005-01-01','2005-01-31') 
    我们可以得到如下的结果:

      drop   function  fun_GetWorkDay
      -----------    
      21 
    
  • 相关阅读:
    剩下的树
    守形数
    小白鼠排队(map容器插入数据的四种方法)
    字母统计
    与7无关的数
    ZOJ
    基于js的CURD插件
    API验证插件
    Django之权限管理插件
    Django之信号和序列化
  • 原文地址:https://www.cnblogs.com/EasonWu/p/829545.html
Copyright © 2011-2022 走看看