在项目中,需要统计本周签到次数,本月签到次数,在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