zoukankan      html  css  js  c++  java
  • 求某段时间内星期几的天数

    /*

    **********************************************

    Program ID: FUN_GetDaysOfWeek

    Purpose   : 求某段时间内某一星期日期的天数

    Author    : Jesse

    Date      : 2011.02.19

    **********************************************

    */

    Go

    Create Function dbo.FUN_GetDaysOfWeek(   

    @DateS smalldatetime,--开始时间

    @DateE smalldatetime,--结束

    @WeekValue int)      --星期的某一天:-周日、-周一...7-周六

    Returns nvarchar(100)

    As

    Begin

        declare

            @sResult nvarchar(100),    --结果描述

            @nResult int,              --结果天数

            @nWeekValue int,           --起始日期是星期几(1-周日、-周一...7-周六)

            @nDays int,                --时间段内的天数

            @nBeforeDays int,          --起始日期到第一次相符日期的天数

            @sWeekName varchar(20),    --所求日期的星期名称

            @tmpDate smalldatetime

       

        set @WeekValue=@WeekValue % 7

        if @WeekValue=0

            set @WeekValue=7

     

        --如果起始日期大于终止日期,则对换

        if @DateS>@DateE

            select @tmpDate=@DateE,@DateE=@DateS,@DateS=@tmpDate

     

        --取得起始日期的星期数,与设置无关(1-周日、-周一...7-周六)

        select @nWeekValue=(Datepart(dw,@DateS)+(@@Datefirst %7))%7

        if @nWeekValue=0

            set @nWeekValue=7

       

        set @sWeekName=DateName(dw,DateAdd(d,@WeekValue-@nWeekValue,@DateS))

     

        if @WeekValue>=@nWeekValue

            set @nBeforeDays=@WeekValue-@nWeekValue

        else

            set @nBeforeDays=7-abs(@WeekValue-@nWeekValue)

     

        --取得时间段内的天数

        select @nDays=Datediff(d,@DateS,@DateE)+1

        if @nDays<@nBeforeDays

            select @nResult=0

        else

            select @nResult=ceiling((@nDays-@nBeforeDays)/7.0)

        set @sResult=N'日期区间:'+ convert(varchar(10),@DateS,120)+ N' 到' +convert(varchar(10),@DateE,120) +' 之间'

                    +@sWeekName +N' 共有'+cast(@nResult as varchar(100))+N' 天'

        Return @sResult

    end   

     

    go

    --测试示例

    select dbo.FUN_GetDaysOfWeek('2011-03-01','2011-05-31',1)

     

    --运行结果

    /*

    日期区间:2011-03-01 到2011-05-31 之间Sunday 共有13 天

    */

  • 相关阅读:
    排序算法合集(冒泡,选择,插入,堆排,快排)
    codeforces 632+ E. Thief in a Shop
    nyoj-一笔画问题-欧拉图+联通判定
    hdu-1179-二分图最大匹配
    hdu-2063-二分图最大匹配
    (转)二分图的最大匹配、完美匹配和匈牙利算法
    hdu-2444-二分图判定+最大分配
    C
    E
    C
  • 原文地址:https://www.cnblogs.com/accumulater/p/6244640.html
Copyright © 2011-2022 走看看