• sql server:自定義計算固定工作日,雙休日函數


    ---sql server 
    declare @date datetime
    set @date='2012-02-03'--getdate()
    --本月第一天
    SELECT DATEADD(mm, DATEDIFF(mm,0,@date), 0)
    --本月最后一天
    SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,@date)+1, 0))
    
    
    ---有個月多少天函數
    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[GetAMonthHowNumber]') and xtype in (N'FN', N'IF', N'TF'))
    drop function [dbo].[GetAMonthHowNumber]
    GO
    CREATE   function  GetAMonthHowNumber
    (  
    	@date datetime
    )
    returns int
    as
    begin
    	declare @int int
    	select @int=datediff(dd , @date , dateadd(mm, 1, @date))
    	return @int
    end
    GO
    
    --
    select [dbo].[GetAMonthHowNumber] (getdate()) AS '月天數'
    
    
    ---計算當月周六,周日有多少天
    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[GetAMonthStatSunNumber]') and xtype in (N'FN', N'IF', N'TF'))
    drop function [dbo].[GetAMonthStatSunNumber]
    GO
    CREATE   function  GetAMonthStatSunNumber
    (  
    	@date datetime
    )
    returns int
    as
    begin
    declare @Sdate datetime ,@Edate datetime
    
    SELECT @Sdate=DATEADD(mm, DATEDIFF(mm,0,@date), 0)
    SELECT @Edate=dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,@date)+1, 0))
    --set @Sdate='2013-05-01'
    --set @Edate='2013-05-31'
    declare @aa table (strdate datetime)  
    declare @i int  
    set @i=datediff(day,@Sdate,@Edate)  
    while(@i>=0)  
    begin  
    insert @aa  values (dateadd(day,@i,@Sdate))  
    set @i=@i-1  
    end  
    select @i= count(*)  from @aa where   datepart(weekday,strdate) in (1,7)  --not in (1,7)
    return @i
    end
    go
    
    --
    select [dbo].[GetAMonthStatSunNumber] (getdate()) AS '雙休日天數'
    
    
    
    --計算當月除周六,周日有多少天,也是有多少工作日
    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[GetAMonthWorkDayNumber]') and xtype in (N'FN', N'IF', N'TF'))
    drop function [dbo].[GetAMonthWorkDayNumber]
    GO
    CREATE   function  GetAMonthWorkDayNumber
    (  
    	@date datetime
    )
    returns int
    as
    begin
    declare @Sdate datetime ,@Edate datetime
    
    SELECT @Sdate=DATEADD(mm, DATEDIFF(mm,0,@date), 0)
    SELECT @Edate=dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,@date)+1, 0))
    --set @Sdate='2013-05-01'
    --set @Edate='2013-05-31'
    declare @aa table (strdate datetime)  
    declare @i int  
    set @i=datediff(day,@Sdate,@Edate)  
    while(@i>=0)  
    begin  
    insert @aa  values (dateadd(day,@i,@Sdate))  
    set @i=@i-1  
    end  
    select @i= count(*)  from @aa where   datepart(weekday,strdate) not in (1,7)  --not in (1,7)
    return @i
    end
    go
    
    ---
    select [dbo].[GetAMonthWorkDayNumber] (getdate()) as '工作日天數'
    
    哲学管理(学)人生, 文学艺术生活, 自动(计算机学)物理(学)工作, 生物(学)化学逆境, 历史(学)测绘(学)时间, 经济(学)数学金钱(理财), 心理(学)医学情绪, 诗词美容情感, 美学建筑(学)家园, 解构建构(分析)整合学习, 智商情商(IQ、EQ)运筹(学)成功.---Geovin Du(涂聚文)
  • 相关阅读:
    Sublime 下配置vim模式 + VintageEx-master下载地址
    Potplayer快捷键
    Failed to fetch URl https://dl-ssl.google.com/android/repository/addo Android SDK更新以及ADT更新出现问题的解决办法
    最快速的Android开发环境搭建ADT-Bundle及Hello World
    Android 开发环境下载地址 -- 百度网盘 adt-bundle android-studio sdk adt 下载
    X-Mirage苹果屏幕录制工具7天试用期破解 imsoft.cnblogs
    玩转博客园的心路总结
    玩转博客园的5个小技巧
    五个对你有用的Everything搜索技巧
    PS如何批量处理图片
  • 原文地址:https://www.cnblogs.com/geovindu/p/3105369.html
Copyright © 2020-2023  润新知