首页 > 代码库 > 统计查询时间段内工作日之和
统计查询时间段内工作日之和
今天有个需求是这样的,要查出本月的工作日之和,在网上搜索了一下,发现看起来最简单的是这样的:
1 DECLARE @DAY DATE,@COUNT INT 2 SET @DAY=CONVERT(VARCHAR(10),Dateadd(dd, -Datepart(dd,GetDate())+ 1,GetDate()), 23) 3 SET @COUNT=0 4 WHILE @DAY<=CONVERT(VARCHAR(100), GetDate(),23) 5 BEGIN 6 SET @COUNT=@COUNT+( 7 CASE DATEPART(WEEKDAY,@DAY) WHEN 1 THEN 0 8 WHEN 7 THEN 0 9 ELSE 1 10 END ) 11 SET @DAY=DATEADD(DAY,1,@DAY) 12 END 13 SELECT @COUNT
简单看了看,觉得有些地方可以优化下,之前有过查询两个时间段内所有日期的列表的经验,所以做了一些改动,现一句话就可以查出:
1 select sum( 2 CASE when DATEPART(WEEKDAY,DATEADD(dd,number,‘2016.10.01‘ )) in (1,7) THEN 0 ELSE 1 END) as WorkDay 3 from master..spt_values 4 where type=‘P‘ and dateadd(dd,number,‘2016.10.01‘)<=‘2016.10.18‘
这里是只查询非周六周日的,如果想要节假日等,可以自己修改下,达到一样的效果。
PS:查询两个时间段内所有日期的列表
1 select DATEADD(dd,number,‘2016.10.01‘ ) 2 from master..spt_values 3 where type=‘P‘ and dateadd(dd,number,‘2016.10.01‘)<=‘2016.10.18‘
这里用了一个小技巧,利用系统表 master..spt_values 里自带的增长集合,来做 DATEADD 的运算。
个人经验,分享下,第一次写博客,欢迎交流~
统计查询时间段内工作日之和
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。