返回顶部
首页 > 资讯 > 数据库 >用SQL只统计工作日数据的方法步骤
  • 208
分享到

用SQL只统计工作日数据的方法步骤

2024-04-02 19:04:59 208人浏览 泡泡鱼
摘要

本篇内容主要讲解“用sql只统计工作日数据的方法步骤”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“用SQL只统计工作日数据的方法步骤”吧!题目求解员工“张三”工

本篇内容主要讲解“用sql只统计工作日数据的方法步骤”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“用SQL只统计工作日数据的方法步骤”吧!

用SQL只统计工作日数据的方法步骤

题目

求解员工“张三”工作日上了多少天班?

测试数据

CREATE TABLE Tmp0317 ( 姓名 VARCHAR(20), 上班时间 DATETIME, 下班时间 DATETIME )  INSERT INTO Tmp0317 VALUE ('张三','2021-03-01 08:05:03','2021-03-01 18:25:26') INSERT INTO Tmp0317 VALUE ('张三','2021-03-03 08:12:12','2021-03-01 18:01:16') INSERT INTO Tmp0317 VALUE ('张三','2021-03-04 08:11:24','2021-03-01 18:09:25') INSERT INTO Tmp0317 VALUE ('张三','2021-03-05 08:15:08','2021-03-01 18:14:43') INSERT INTO Tmp0317 VALUE ('张三','2021-03-09 08:20:26','2021-03-01 18:23:48') INSERT INTO Tmp0317 VALUE ('张三','2021-03-10 08:23:16','2021-03-01 18:19:04') INSERT INTO Tmp0317 VALUE ('张三','2021-03-11 08:19:13','2021-03-01 18:26:29') INSERT INTO Tmp0317 VALUE ('张三','2021-03-12 08:17:42','2021-03-01 18:11:12') INSERT INTO Tmp0317 VALUE ('张三','2021-03-13 08:15:37','2021-03-01 18:10:05')

用SQL只统计工作日数据的方法步骤

分析

要求解工作日的天数,只需要排除掉周末即可,这里我们暂不考虑忘打卡的情况。我们可以借助SQL Server里面的系统表spt_values来进行求解

具体解法

SELECT  SUM( CASE WHEN DATEPART(WEEKDAY,DATEADD(DD,NUMBER,'2021-03-01' )) IN (1,7)  THEN 0  ELSE 1 END ) AS WORKDAY FROM MASTER..SPT_VALUES JOIN Tmp0317 ON DATEADD(DAY, NUMBER, CONVERT(DATE, '2021-03-01'))=CONVERT(DATE,上班时间) WHERE TYPE='P'  AND NUMBER BETWEEN 0 AND DATEDIFF(DAY, '2021-03-01', DATEADD(MONTH, 1, '2021-03-01'))-1

(提示:可以左右滑动代码)

结果为:

用SQL只统计工作日数据的方法步骤

我们可以对照日历表看下,“张三”在这几天的工作日打开记录:

用SQL只统计工作日数据的方法步骤

其中红色框表示工作日,绿色框表示周末,张三总共9条记录,13日周六这天应该是回公司加班了,但是我们不算正常工作日的考勤记录,所以结果是8.

代码解析

上面的代码估计很多读者看的有点懵,这里我们将代码先拆解开,看下每个函数里面的结果什么,大家就知道了。

首先是spt_values这个系统表,我们在之前的文章里有提到过具体的用法。

其次我们看下关联条件:

JOIN Tmp0317 ON  DATEADD(DAY, NUMBER, CONVERT(DATE, '2021-03-01'))=CONVERT(DATE,上班时间)

这里我们单独看等号两本的结果:

SELECT  DATEADD(DAY, NUMBER, CONVERT(DATE, '2021-03-01')) FROM MASTER..SPT_VALUES  WHERE TYPE='P'  AND NUMBER BETWEEN 0 AND DATEDIFF(DAY, '2021-03-01', DATEADD(MONTH, 1, '2021-03-01'))-1

注意:这里必须加上后面的WHERE条件部分,其中后面的

DATEDIFF(DAY, '2021-03-01', DATEADD(MONTH, 1, '2021-03-01'))-1

的结果是30,这里因为我们的NUMBER是从0开始,所以后面要减去1,即从0-30,表示3月共31天

查询出的结果如下:

用SQL只统计工作日数据的方法步骤

后面还有16-31日的记录未截取,大家可以去自己电脑上试验一下。

然后再看等号右边的结果:

SELECT CONVERT(DATE,上班时间)  FROM Tmp0317

结果如下:

用SQL只统计工作日数据的方法步骤

这样,我们就可以通过关联条件来获取到我们需要的上班日期了,但是这并不是工作日的上班日期,我们最后还要做一个判断,那就是SELECT后面的CASE  WHEN条件了。

CASE WHEN里面的代码我们也单独执行一下:

SELECT   DATEADD(DD,NUMBER,'2021-03-01' ), DATEPART(WEEKDAY,DATEADD(DD,NUMBER,'2021-03-01' )) AS WORKDAY  FROM MASTER..SPT_VALUES JOIN Tmp0317 ON DATEADD(DAY, NUMBER, CONVERT(DATETIME, '2021-03-01'))=CONVERT(DATE,上班时间) WHERE TYPE='P' AND NUMBER BETWEEN 0 AND DATEDIFF(DAY, '2021-03-01', DATEADD(MONTH, 1, '2021-03-01'))-1

我们将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,表示统计。

即:

SELECT   DATEADD(DD,NUMBER,'2021-03-01' ), DATEPART(WEEKDAY,DATEADD(DD,NUMBER,'2021-03-01' )), CASE WHEN DATEPART(WEEKDAY,DATEADD(DD,NUMBER,'2021-03-01' )) IN (1,7) THEN 0  ELSE 1 END AS WORKDAY  FROM MASTER..SPT_VALUES JOIN Tmp0317 ON DATEADD(DAY, NUMBER, CONVERT(DATETIME, '2021-03-01'))=CONVERT(DATE,上班时间) WHERE TYPE='P' AND NUMBER BETWEEN 0 AND DATEDIFF(DAY, '2021-03-01', DATEADD(MONTH, 1, '2021-03-01'))-1

结果为:

用SQL只统计工作日数据的方法步骤

对WORKDAY列进行SUM求和就得到了我们的结果8

Q:这里能不使用spt_values吗?

A:可以的,只需要构建一张临时表,表结构也只需要一列,就是一列自增长的连续整数即可

到此,相信大家对“用SQL只统计工作日数据的方法步骤”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

您可能感兴趣的文档:

--结束END--

本文标题: 用SQL只统计工作日数据的方法步骤

本文链接: https://lsjlt.com/news/61603.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 用SQL只统计工作日数据的方法步骤
    本篇内容主要讲解“用SQL只统计工作日数据的方法步骤”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“用SQL只统计工作日数据的方法步骤”吧!题目求解员工“张三”工...
    99+
    2024-04-02
  • Win8系统评价我的计算机的操作方法步骤
    不知道网友们知不知道在win8系统中可以评价我的计算机,还有进行打分;这样可以知道我们的计算机是优秀还是良好的状态。但是要怎么的进行操作呢!现在我们一起去看看吧!     Win8为计算机评分的方法如下: ...
    99+
    2022-06-04
    操作方法 步骤 评价
  • springboot利用AOP完成日志统计的详细步骤
    目录1、创建日志表2、创建实体类3、创建枚举类4、创建自定义注解5、获取ip的util6、线程池util7、HttpServletRequest实现类8、添加过滤器9、添加AOP核心...
    99+
    2024-04-02
  • 用.NET生成数据库的方法步骤
    本篇内容介绍了“用.NET生成数据库的方法步骤”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!开篇语本文主要...
    99+
    2024-04-02
  • SQL Server数据库分离和附加数据库的操作步骤
    目录1. 概述2. 分离数据库2.1 分离数据库的步骤3. 附加数据库3.1 附加数据的操作步骤总结 1. 概述 若要将数据库移动或更改到同一计算机的不同 SQL Server 实例,分离和附加数据库会很有用;...
    99+
    2024-04-02
  • SQL Server数据库分离和附加数据库的操作步骤
    目录1. 概述2. 分离数据库2.1 分离数据库的步骤3. 附加数据库3.1 附加数据的操作步骤总结 1. 概述 若要将数据库移动或更改到同一计算机的不同 SQL Serv...
    99+
    2022-11-13
    sqlserver分离和附加数据库 sql数据库分离与附加 数据库分离与附加的概念和方法
  • 使用JDBC连接数据库的方法步骤
    这篇文章主要讲解了“使用JDBC连接数据库的方法步骤”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“使用JDBC连接数据库的方法步骤”吧!JDBC简介  JD...
    99+
    2024-04-02
  • 备份MySQL数据库的方法步骤
    这篇文章主要介绍“备份MySQL数据库的方法步骤”,在日常操作中,相信很多人在备份MySQL数据库的方法步骤问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”备份MySQL数据库...
    99+
    2024-04-02
  • C#使用log4net记录日志的方法步骤
    一、Nuget安装log4net --> Install-Package log4net 二、在AssemblyInfo.cs文件中添加log4net.dll的参数。 [as...
    99+
    2024-04-02
  • Springboot使用slf4j记录日志的方法步骤
    目录前言如何在Springboot中使用slf4j记录日志测试前言 在项目开发中,记录日志是必做的一件事情。而当我们使用Springboot框架时,记录日志就变得极其简单了。 spr...
    99+
    2024-04-02
  • navicat导入sql数据库文件的简单操作步骤
    目录 前言必读 一、概念 二、操作步骤 (一)新建连接  (二)新建数据库 (三)数据库导入sql文件 前言必读 读者手册(必读)_云边的快乐猫的博客-CSDN博客 一、概念 在很多项目当中都有sql文件导入到MySQL数据库的需...
    99+
    2023-09-07
    数据库 数据库导入 sql导入 MySQL mysql导入
  • Linux中使用数据备份同步工具Rsync的操作方法
    Linux中使用数据备份同步工具Rsync的操作方法,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。对于运维人员来说,数据备份是最重要的工作之一,rsync就是一款通过网络备...
    99+
    2023-06-12
  • mysql中统计数据的方法
    小编给大家分享一下mysql中统计数据的方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!mysql中统计数据的方法:1、使用M...
    99+
    2024-04-02
  • 数据清洗和转换的方法步骤
    本篇内容介绍了“数据清洗和转换的方法步骤”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! 01 了...
    99+
    2024-04-02
  • docker迁移数据目录的方法步骤
    目录查看磁盘使用磁盘清理 (切勿轻易使用)迁移数据查看磁盘使用 # du -hs /var/lib/docker/ 237G /var/lib/docker/ # docke...
    99+
    2024-04-02
  • C#连接MySQL数据库的方法步骤
    目录一、需求二、新建 C# 项目三、MySQL数据库四、MySqlHelper五、测试总结一、需求 C# 使用 MySQL 数据库的情况还是比较少的,大部分使用 Windows 平台...
    99+
    2023-01-11
    c#连接mysql数据库配置 c连接mysql数据库 c#连接mysql数据库语法
  • Linux操作系统下安装rpm包的方法步骤
    这篇文章主要介绍“Linux操作系统下安装rpm包的方法步骤”,在日常操作中,相信很多人在Linux操作系统下安装rpm包的方法步骤问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Linux操作系统下安装rpm...
    99+
    2023-06-09
  • 如何使用SQL连接阿里云数据库详细步骤与方法
    本文将详细介绍如何使用SQL连接阿里云数据库。首先,我们将介绍如何创建阿里云数据库,并在本地机器上安装和配置SQL工具。然后,我们将详细解释如何使用SQL连接到阿里云数据库,并执行基本查询。最后,我们将探讨如何在本地机器上备份和恢复阿里云数...
    99+
    2023-11-02
    阿里 如何使用 步骤
  • django中使用原生sql语句的方法步骤
    raw # row方法:(掺杂着原生sql和orm来执行的操作) res = CookBook.objects.raw('select id as nid from ...
    99+
    2024-04-02
  • mssql数据库系统崩溃的一般处理步骤与方法
    本篇内容介绍了“mssql数据库系统崩溃的一般处理步骤与方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作