该解决方案使用与Rodger基本相同的方法,除了生成矩阵的方法要复杂得多。注意:此解决方案的此输出与NETWORKDAYS不兼容。

与Rodger的解决方案一样,这可以计算开始日期(@S)和结束日期(@E)之间的工作日数,而无需定义存储过程。它假定结束日期不在开始日期之前。使用相同的开始和结束日期将产生0.不考虑假期。

这与Rodger的解决方案之间的主要区别在于矩阵和结果的数字串是由一个我没有包含的复杂算法构造的。该算法的输出由单元测试验证(参见下面的测试输入和输出)。在矩阵中,任何给定的x和y值对(WEEKDAY(@S)和WEEKDAY(@E)的交集产生两个值之间的工作日差异。分配顺序实际上并不重要,因为两者被加在一起绘制位置。

营业日为周一至周五

| M T W T F S S

-|--------------

M| 0 1 2 3 4 5 5

T| 5 0 1 2 3 4 4

W| 4 5 0 1 2 3 3

T| 3 4 5 0 1 2 2

F| 2 3 4 5 0 1 1

S| 0 1 2 3 4 0 0

S| 0 1 2 3 4 5 0

表中的49个值连接成以下字符串:

0123455501234445012333450122234501101234000123450

最后,正确的表达是:

5 * (DATEDIFF(@E, @S) DIV 7) + MID('0123455501234445012333450122234501101234000123450', 7 * WEEKDAY(@S) + WEEKDAY(@E) + 1, 1)

我已使用此解决方案验证了以下输入和输出:

Sunday, 2012-08-26 -> Monday, 2012-08-27 = 0

Sunday, 2012-08-26 -> Sunday, 2012-09-02 = 5

Monday, 2012-08-27 -> Tuesday, 2012-08-28 = 1

Monday, 2012-08-27 -> Monday, 2012-09-10 = 10

Monday, 2012-08-27 -> Monday, 2012-09-17 = 15

Monday, 2012-08-27 -> Tuesday, 2012-09-18 = 16

Monday, 2012-08-27 -> Monday, 2012-09-24 = 20

Monday, 2012-08-27 -> Monday, 2012-10-01 = 25

Tuesday, 2012-08-28 -> Wednesday, 2012-08-29 = 1

Wednesday, 2012-08-29 -> Thursday, 2012-08-30 = 1

Thursday, 2012-08-30 -> Friday, 2012-08-31 = 1

Friday, 2012-08-31 -> Saturday, 2012-09-01 = 1

Saturday, 2012-09-01 -> Sunday, 2012-09-02 = 0

Sunday, 2012-09-02 -> Monday, 2012-09-03 = 0

Monday, 2012-09-03 -> Tuesday, 2012-09-04 = 1

Tuesday, 2012-09-04 -> Wednesday, 2012-09-05 = 1

Wednesday, 2012-09-05 -> Thursday, 2012-09-06 = 1

Thursday, 2012-09-06 -> Friday, 2012-09-07 = 1

Friday, 2012-09-07 -> Saturday, 2012-09-08 = 1

Saturday, 2012-09-08 -> Sunday, 2012-09-09 = 0

Monday, 2012-09-24 -> Sunday, 2012-10-07 = 10

Saturday, 2012-08-25 -> Saturday, 2012-08-25 = 0

Saturday, 2012-08-25 -> Sunday, 2012-08-26 = 0

Saturday, 2012-08-25 -> Monday, 2012-08-27 = 0

Saturday, 2012-08-25 -> Tuesday, 2012-08-28 = 1

Saturday, 2012-08-25 -> Wednesday, 2012-08-29 = 2

Saturday, 2012-08-25 -> Thursday, 2012-08-30 = 3

Saturday, 2012-08-25 -> Friday, 2012-08-31 = 4

Saturday, 2012-08-25 -> Sunday, 2012-09-02 = 0

Monday, 2012-08-27 -> Monday, 2012-08-27 = 0

Monday, 2012-08-27 -> Tuesday, 2012-08-28 = 1

Monday, 2012-08-27 -> Wednesday, 2012-08-29 = 2

Monday, 2012-08-27 -> Thursday, 2012-08-30 = 3

Monday, 2012-08-27 -> Friday, 2012-08-31 = 4

Monday, 2012-08-27 -> Saturday, 2012-09-01 = 5

Monday, 2012-08-27 -> Sunday, 2012-09-02 = 5

mysql 计算工作日_MySQL函数查找两个日期之间的工作日数相关推荐

  1. Mysql判断工作日函数_MySQL函数查找两个日期之间的工作日数

    慕田峪9158850 该解决方案使用与Rodger基本相同的方法,除了生成矩阵的方法要复杂得多.注意:此解决方案的此输出与NETWORKDAYS不兼容.与Rodger的解决方案一样,这可以计算开始日期 ...

  2. java计算时间区间工作日_Java如何计算两个日期之间的工作日数?

    以下代码可帮助您查找两个日期之间指定的工作日(星期一,星期二,星期三等)的数量.我们下面使用的解决方案是在两个日期之间循环,并检查这些日期的工作日是否等于我们要计算的日期.package org.nh ...

  3. java 时间间隔 工作日_计算Java中两个日期之间的工作日数

    5行代码无循环的解决方案 定义之间的天数的方式与ChronoUnit.DAYS.between(start, end)表示4星期一至星期五之间存在天数的方式相同.由于我们只对工作日感兴趣,因此我们必须 ...

  4. java 时间间隔 工作日,计算Java中两个日期之间的工作日数

    Can anyone point me to some Java snippet wherein i can get business (except Sat and Sun) days betwee ...

  5. 【SQL开发实战技巧】系列(十七):数据仓库中时间类型操作(初级)确定两个日期之间的工作天数、计算—年中周内各日期出现次数、确定当前记录和下一条记录之间相差的天数

    系列文章目录 [SQL开发实战技巧]系列(一):关于SQL不得不说的那些事 [SQL开发实战技巧]系列(二):简单单表查询 [SQL开发实战技巧]系列(三):SQL排序的那些事 [SQL开发实战技巧] ...

  6. DATEDIFF() 函数返回两个日期之间的天数

    定义和用法 DATEDIFF() 函数返回两个日期之间的天数. 语法 DATEDIFF(date1,date2) date1 和 date2 参数是合法的日期或日期/时间表达式. 注释:只有值的日期部 ...

  7. SQL计算两个日期之间的工作天数

    if exists (select * from dbo.sysobjects where id = object_id(N'[tb_Holiday]') and OBJECTPROPERTY(id, ...

  8. 如何计算两个日期之间的工作天数

    大家好,才是真的好. 很多人觉得,Notes应用中的日期处理是一大需求点,也是一大难点,为此很多人使用Java代码来进行处理.但要是学会并灵活运用Domino中的公式,很多问题会变得很简单.今天我们就 ...

  9. mysql求2个日期之间的工作日数(周一到周五)

    SQL实现2个日期之间的工作日数(MySQL) 限制条件:只能计算同一年的工作日,如果您需要跨年计算,请输入2次即可. 雕虫小技,希望能对你有所帮助. DROP FUNCTION IF EXISTS ...

最新文章

  1. CentOS 6.0 VNC远程桌面配置
  2. 转 使用DCloud+Framework7制作移动APP应用
  3. 无人值守的自动 dump(二)
  4. FLASH的知识【转】
  5. 一致性哈希算法——虚拟节点
  6. matlab中怎样绘制离散点,matlab中怎么绘制大量的离散点
  7. excel熵值法计算权重_评价得分计算:确立权重的方法
  8. 王鉴老师--沪师经纪-刘建
  9. android 控件属性大全
  10. 金融贷超、贷款行业防止撸贷方案分析
  11. 经典的大学学习生活心得
  12. layui后台添加数据给php,layui怎么实现数据绑定
  13. ISP 和IAP 原理与区别
  14. WinSCP登陆服务器提示收到了太大的SFTP包 支持的最大包大小1024000B
  15. iPhone的13个隐秘功能
  16. CGB2105-Day03
  17. java村庄水井_我的世界:它们同样是“水井”却隐藏着不同的“秘密”,见过吗?...
  18. alu和mdr位数相等吗_计算机组成原理复习
  19. 佛山市大学生落户政策2023年入户条件介绍
  20. m5310模组数据上传至onenet_m5310模组数据上传至onenet_移动M5310-A NB-IoT通信模组技术参数...

热门文章

  1. Python使用turtle画一朵美丽的玫瑰花
  2. SpringBoot启动时:Process finished with exit code 0解决办法
  3. 我在著名的外企工作多年
  4. vos3000客户在设置服务器防火墙时需要打开哪些 VOS 应用端口
  5. 不同架构cpu上的c语言编译器,关于c ++:检测CPU架构的编译时
  6. 《农业机械学报》论文的格式要求
  7. 人力资源数据分析师前景_数据分析师的前途在哪?
  8. 阿里云centos7安装图形界面
  9. 解决IDEA-not allow to run in parallel
  10. SpringBoot 项目中在Controller 直接调用Mapper,提示:Field mapper in ‘*Controller ‘ required a bean of type ‘*Map