求某段时间内星期几的天数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求某段时间内星期几的天数相关的知识,希望对你有一定的参考价值。
/*
**********************************************
Program ID: FUN_GetDaysOfWeek
Purpose : 求某段时间内某一星期日期的天数
Author : Jesse
Date : 2011.02.19
**********************************************
*/
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 @[email protected] % 7
if @WeekValue=0
set @WeekValue=7
--如果起始日期大于终止日期,则对换
if @DateS>@DateE
select @[email protected],@[email protected],@[email protected]
--取得起始日期的星期数,与设置无关(1-周日、-周一...7-周六)
select @nWeekValue=(Datepart(dw,@DateS)+(@@Datefirst %7))%7
if @nWeekValue=0
set @nWeekValue=7
set @sWeekName=DateName(dw,DateAdd(d,@[email protected],@DateS))
if @WeekValue>[email protected]
set @[email protected]@nWeekValue
else
set @nBeforeDays=7-abs(@[email protected])
--取得时间段内的天数
select @nDays=Datediff(d,@DateS,@DateE)+1
if @nDays<@nBeforeDays
select @nResult=0
else
select @nResult=ceiling((@[email protected])/7.0)
set @sResult=N‘日期区间:‘+ convert(varchar(10),@DateS,120)+ N‘ 到‘ +convert(varchar(10),@DateE,120) +‘ 之间‘
[email protected] +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 天
*/
以上是关于求某段时间内星期几的天数的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Pyspark 2.1 中使用窗口函数来计算星期几的出现次数