mysql - 将 15 日之前的星期六算作工作日并跳过其他日期

标签 mysql

我公司的政策是我们把15天之前的星期六算作工作日,15天之后的星期六算公司假期 请告诉我计算当月工作日的函数跳过查询中15天之前的所有星期日和星期六

最佳答案

您可以使用以下代码根据您的要求计算工作日 -

CREATE FUNCTION FN_CNT_Working_days(StartDate DATE,
                                    EndDate   DATE) 
RETURNS INT
BEGIN
     DECLARE WORKING_DAYS INT;
     SELECT
   (DATEDIFF(EndDate, DATE(CONCAT(YEAR(EndDate), '-', MONTH(EndDate), '-', 16))) + 1)
  -(FLOOR(DATEDIFF(EndDate, DATE(CONCAT(YEAR(EndDate), '-', MONTH(EndDate), '-', 16)))/7) * 2)
  -(CASE WHEN DAYNAME(DATE(CONCAT(YEAR(EndDate), '-', MONTH(EndDate), '-', 16))) = 'Sunday' THEN 1 ELSE 0 END)
  -(CASE WHEN DAYNAME(EndDate) = 'Saturday' THEN 1 ELSE 0 END) 
   +
   (DATEDIFF(DATE(CONCAT(YEAR(EndDate), '-', MONTH(EndDate), '-', 15)), StartDate) + 1)
  -(FLOOR(DATEDIFF(DATE(CONCAT(YEAR(EndDate), '-', MONTH(EndDate), '-', 15)), StartDate)/7))
  -(CASE WHEN DAYNAME(StartDate) = 'Sunday' THEN 1 ELSE 0 END)
     INTO WORKING_DAYS;

     RETURN (WORKING_DAYS);
END;

Here是 fiddle 。此外,您还需要使用此代码处理假期。

关于mysql - 将 15 日之前的星期六算作工作日并跳过其他日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58425598/

相关文章:

mysql - 使用 LIKE 指定一组字符

c# - 如何将存储过程添加到 EF .edmx?

mysql - 查询差异问题

mysql - 如何计算 WHERE 子句上的字段

mysql - 选择与总和不同

mysql - TYPO3 Extbase 扩展 : Where do i find the MySql database tables for each class of the extension?

mysql - GROUP BY 子句并在查询中包含非聚合列

mysql - 从 MySQL 中的列中删除 NOT NULL 限制

Mysql 选择最大连续记录(有间隙)

MySQL:为什么在此查询中将 "1+1"视为 "1"?