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 天

    */

  • 相关阅读:
    Java实现 LeetCode 56 合并区间
    JQuery实现对html结点的操作(创建,添加,删除)
    JQuery实现对html结点的操作(创建,添加,删除)
    JQuery实现对html结点的操作(创建,添加,删除)
    Java实现 LeetCode 55 跳跃游戏
    Java实现 LeetCode 55 跳跃游戏
    Java实现 LeetCode 55 跳跃游戏
    Java实现 LeetCode 54 螺旋矩阵
    Java实现 LeetCode 54 螺旋矩阵
    Java实现 LeetCode 54 螺旋矩阵
  • 原文地址:https://www.cnblogs.com/accumulater/p/6244640.html
Copyright © 2011-2022 走看看