MYSQL 如何得到两个日期间的工作日(不含周六日,节假日)
写在前面 参考文章
SQL 如何得到两个日期间的工作日(附假期表)_Fuzz-CSDN博客_sql计算日期之间工作日函数
这篇文章使用的是SQL SEVER ,如何转化为 MYSQL
新手尝试两个小时,不喜勿碰 (直接复制他的内容了,代码改一下)
懒得截图跟上传附件了,建议两篇文章比对着看
思路是一样的,就是将开始时间到截止时间按日期进行拆分,与工作日的辅助表进行关联,关联后对辅助列计数
SELECT
id,
[SP PO creation Date],
[HUB GI date],
COUNT (*) AS COUNT
FROM
(
SELECT
id,
[SP PO creation Date],
[HUB GI date],
DATEADD(
DAY,
number,
[SP PO creation Date]
) AS riqi
-- 在这里 SQL SEVER 中DATEADD(DAY,增加的天数,字段名),MYSQL 中是 DATE_ADD(字段名,INTERVAL 增加的天数 DAY) 替换掉就好
-- 然后他这里用到一个number,这个number下边说
FROM
[DW].[dbo].[TAB Row Data From ECC temp6] AS A
INNER JOIN master..spt_values AS B ON DATEADD(
DAY,
number,
[SP PO creation Date]
) <= [HUB GI date]
AND B.[type] = 'P'
order by id,riqi --(没啥用,删掉了)
-- 注意标绿色的,这个代码是SQL SEVER中自带的库,MYSQL查了半天没有,或者我不知道,然后查了一下SQL SEVER 中 master..spt_values . [type] = 'P' 其实就是从0开始的一串数。然后可以再新建一个辅助表,辅助表就是从0开始一直到好多吧,你看你要计算的工作日最大能有多少,一两千都行,越多查询的越慢
(辅助表的表名比如是 number,字段名也是number)
-- 那么上面的DATE_ADD这个代码就可以改成DATE_ADD(字段名,INTERVAL number DAY)
-- INNER JOIN 这个代码就可以改成 INNER JOIN number AS B ON...
AND NOT EXISTS (
SELECT
1
FROM
[TAB].[dbo].[holiday] b
WHERE
[DAY_WORK] = 2
AND DATEADD(
DAY,
number,
[SP PO creation Date]
) = CONVERT (DATE, [DATE_ID])
)
-- 这段代码是要排除出去假日的数据,但是我不知道为什么按照他的执行结果是没有排除的,可能我的水平不行吧,然后进行了一下修改
-- 首先 NOT EXISTS不知道为什么执行出来没效果,所以我用了NOT IN ,整体修改如下
AND DATE_ADD( [SP PO creation Date] , INTERVAL number DAY)
not in
(
SELECT DATE FROM [TAB].[dbo].[holiday] WHERE [DAY_WORK] = 2
)
) a
GROUP BY
id,
[SP PO creation Date],
[HUB GI date]
-- 全部修改后的代码如下
SELECT
id,[SP PO creation Date], [HUB GI date],COUNT (*) AS COUNT
FROM
(
SELECT
id,[SP PO creation Date],[HUB GI date],
DATE_ADD( [SP PO creation Date] , INTERVAL number DAY) AS riqi
FROM
[DW].[dbo].[TAB Row Data From ECC temp6] AS A
INNER JOIN number AS B ON DATE_ADD( [SP PO creation Date] , INTERVAL number DAY) <= [HUB GI date]
AND DATE_ADD( [SP PO creation Date] , INTERVAL number DAY)
NOT IN
(SELECT DATE FROM [TAB].[dbo].[holiday] WHERE [DAY_WORK] = 2 ) ) a
GROUP BY
id, [SP PO creation Date], [HUB GI date]
需要的辅助表到原文下载,或者自建一个,序号表0-你需要的数,自建一个
纯手打,不喜勿碰,欢迎指正
MYSQL 如何得到两个日期间的工作日(不含周六日,节假日)相关推荐
- SQL 如何得到两个日期间的工作日(附假期表)
首先,我们有这样一张表 我们要知道两个日期间的工作日天数,相信大家有遇到过这个恶心人的需求,所谓工作日,不简简单单的就是除周六日以外的日子.要考虑到节假日,国庆啊,中秋啊,最让人头疼的是,你根本无法掌 ...
- oracle计算两个日期间的工作日(根据表配置)
首先新增表用于配置非工作日,工作日,具体配置在程序中处理 DROP TABLE "T_WEEKDAY"; CREATE TABLE "T_WEEKDAY" (& ...
- Python计算两个日期间的工作日(交易日),去除周末节假日
首先区分一下这里的工作日和节假日是不同的. 工作日是指去掉节假日即周末,但是不去掉调休的日期. 交易日主要针对金融行业,是指去掉节假日和周末,因为周末金融市场也是停盘的,所以即使周末因为调休工作,也不 ...
- python获取两个日期间的工作日
python获取两个日期间的工作日 import datetime # 计算两个日期之间的工作日数,非天数. class workDays():def __init__(self, start_dat ...
- 记录一次计算两个日期间的工作日天数,排除节假日、周末等
1.数据库存储节假日.补班日期 数据库结构如下,0代表节日,1代表补班日期,需要每年更新 2.代码 (1)计算相差天数 @Overridepublic Long getWorkDay(String s ...
- SQLServer 计算两个日期间的工作日(排除周六和周日,不排除节假日)
CREATE FUNCTION GetWorkDays(@dt_begin DATETIME , --计算的开始日期@dt_end DATETIME --计算的结束日期) RETURNS INT AS ...
- 计算两个日期间有多少个工作日
function TmainForm.WorksDay( //计算两个日期间有多少个工作日 mStartDate: TDate; //开始日期 mEndDate: TDate //终止日期 ): In ...
- 计算两个日期之间的工作日(去掉周末和节假日)
一个贴吧上找到的,整理一下 package com.uphone.commons;import java.text.ParseException; import java.text.SimpleDat ...
- python编程工时计算_Python编程题:两个日期间的天数统计(附代码)
编程题一:计算两个日期之间的天数 题目如下: 题目一 解题思路: 将两个日期格式化成time模块中的标准时间结构struct_time,缺少值用0补齐利用time模块函数分别计算两个日期到时间戳(指格 ...
最新文章
- flash 入门课知识小结
- 如何区分两列中不同数据_如何在VESTA中区分不同表面层的原子
- 这可能是东半球最保姆级的后台服务器开发学习路线
- GitHub回应突然断供:身在美国不由己,无权提前通知预警
- 忍一时得寸进尺, 退一步变本加厉。
- 自嘲尾款人、丁工人?今年双十一就没想让你做人
- Cuckoo WIndows 安装
- linux 下添加,修改,删除路由
- 【渝粤教育】电大中专新媒体营销实务 (6)作业 题库
- 前端学习(3197):jsx语法规则1
- faiss python安装_如何在ubuntu 18.04上安装faiss GPU
- apache安装步骤(redhat)
- Android安卓小程序-随机数生成器
- java并发编程-CAS算法
- html实现圆形图片
- 2020年手机上最好的25种免费游戏
- Java常见面试题大全
- 计算机音乐专业考研,武汉音乐学院2021年硕士研究生招生考试《计算机音乐作曲》考试大纲...
- 红米3用电信卡显示无服务器,红米3支持电信卡吗?红米3支持联通卡吗?
- Win10安装ST-Link驱动