在项目中,需要统计本周签到次数,本月签到次数,在SQL中利用Count聚合函数搞定,但是纠结怎么表示第一天和最后一天。

经过查阅资料和反思,找到了,不废话,直接上图。


一.找到本周的第一天和最后一天

--思路,找到今天是本周的第几天,注意减少1,才是中国叫法中的第几天
--然后再在今天的日期上减少(第几天-1)能得到第几天
--找到本周第一天,找到最后一天就顺水推舟的
DECLARE @WeekFirstDay DATETIME
DECLARE @WeekEndDay DATETIME
DECLARE @NowWeek INT 
DECLARE @CutDownDay INT
SELECT @NowWeek=DATEPART(weekday,GETDATE())-1
SELECT @CutDownDay=(@NowWeek-1)
SELECT @WeekFirstDay=DATEADD(DAY,-@CutDownDay,CONVERT(VARCHAR(10),GETDATE(),120))
SELECT @WeekEndDay=DATEADD(SECOND,-1,DATEADD(DAY,7,@WeekFirstDay))
SELECT @WeekFirstDay,@WeekEndDay


二.找到本月的最后一天和第一天。

--以下获取一个月的第一天和最后一天
DECLARE @firstDay DATETIME
DECLARE @endDay DATETIME
SELECT @firstDay=CONVERT(VARCHAR(8),GETDATE(),120)+'01'
--获得最后一天的思路:因为无法获得一个月到底是几天,
--所以可以得带下一个月的第一天,然后减少一个秒
SELECT @endDay=DATEADD(SECOND,-1,DATEADD(MONTH,1,@firstDay))
SELECT @firstDay
SELECT @endDay