本篇内容主要讲解“用SQL只统计工作日数据的方法步骤”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带免费主机域名大家学习“用SQL只统计工作日数据的方法步骤”吧!求解员工“张三”工作日上了多少天班?要求解工作日的天数,只需要排除掉周末即可,这里我们暂不考虑忘打卡的情况。我们可以借助SQL Server里面的系统表spt_values来进行求解(提示:可以左右滑动代码)结果为:我们可以对照日历表看下,“张三”在这几天的工作日打开记录:其中红色框表示工作日,绿色框表示周末,张三总共9条记录,13日周六这天应该是回公司加班了,但是我们不算正常工作日的考勤记录,所以结果是8.上面的代码估计很多读者看的有点懵,这里我们将代码先拆解开,看下每个函数里面的结果什么,大家就知道了。首先是spt_values这个系统表,我们在之前的文章里有提到过具体的用法。其次我们看下关联条件:这里我们单独看等号两本的结果:注意:这里必须加上后面的WHERE条件部分,其中后面的DATEDIFF(DAY, ‘2021-03-01’, DATEADD(MONTH, 1, ‘2021-03-01’))-1的结果是30,这里因为我们的NUMBER是从0开始,所以后面要减去1,即从0-30,表示3月共31天查询出的结果如下:后面还有16-31日的记录未截取,大家可以去自己电脑上试验一下。然后再看等号右边的结果:结果如下:这样,我们就可以通过关联条件来获取到我们需要的上班日期了,但是这并不是工作日的上班日期,我们最后还要做一个判断,那就是SELECT后面的CASE WHEN条件了。CASE WHEN里面的代码我们也单独执行一下:我们将DATEPART里面的嵌套函数DATEADD也单独拎出来,看下执行结果:图片这里的DATEPART的功能主要是用来返回这一天是这个星期的第几天,我们的系统日历是按照美国的历法,每周的第一天是星期日,所以2021-03-01的星期一是本周的第二天,以此类推,我们得到每一天对应在本周的第几天。知道这个结果后,我们可以得知,每个周的第2-6天是对应我们的工作日,那么我们可以取这个结果IN (2,3,4,5,6) 也可以 NOT IN (1,7)。这里我们用免费主机域名CASE WHEN取的反义词,当它IN (1,7)时我们返回0,表示不统计,其他结果返回1,表示统计。即:结果为:对WORKDAY列进行SUM求和就得到了我们的结果8Q:这里能不使用spt_values吗?A:可以的,只需要构建一张临时表,表结构也只需要一列,就是一列自增长的连续整数即可到此,相信大家对“用SQL只统计工作日数据的方法步骤”有了更深的了解,不妨来实际操作一番吧!这里是云技术网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
本篇内容介绍了“如何修改插入时间不匹配”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! 查看客户端字符集参数:select * from nls_se免费主机域名…