Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySql每月或今天的工作天数(带加权假期)_Mysql_Sql - Fatal编程技术网

MySql每月或今天的工作天数(带加权假期)

MySql每月或今天的工作天数(带加权假期),mysql,sql,Mysql,Sql,我需要使用MySQL计算一个月内或到当前日期的工作日数 工作日的权重如下: 周一至周五:1 Sat:0.5 太阳和假日:0 我有一张名为t_holiday的桌子,里面有假期(包括周日,但不是周六),例如: _______________________________ |holiday_date | holiday_desc | |-------------|---------------| |2017-12-31 | Sunday Off | |2017-12-25 | Ch

我需要使用MySQL计算一个月内或到当前日期的工作日数

工作日的权重如下:
周一至周五:1
Sat:0.5
太阳和假日:0

我有一张名为t_holiday的桌子,里面有假期(包括周日,但不是周六),例如:

_______________________________
|holiday_date | holiday_desc  |
|-------------|---------------|
|2017-12-31   | Sunday Off    | 
|2017-12-25   | Christmas Day |
|2017-12-24   | Sunday Off    |
------------------------------- (and so on)

使用mysql可以做到这一点吗?如果需要的话,我可能会在大学假期中增加周六。

是的,可能。你想要的是
工作天数=月份天数-节假日-周六(非节假日)*0.5

我能想到的最简单的方法是:
1.是的,我们有一张假日桌 2.将星期六放入假日表t\u假日
3.将另一列假日权重,其中正常假日或周日的假日权重为1,周六的假日权重为0.5

因此,您的答案是工作天数=月份天数-天数(假期*权重)

在Sql中,2月份的情况是:

SELECT DAY(LAST_DAY('2015-2-1')) - 
SELECT (SUM(holiday_weight)) FROM t_holiday WHERE YEAR(holiday_date) = my_year AND MONTH(holiday_date) = my_month)
如果您想要的是截止日期,那么:

SELECT DAY(CURDATE()) - 
SELECT (SUM(holiday_weight)) FROM t_holiday WHERE YEAR(holiday_date) = YEAR(CURDATE()) AND MONTH(holiday_date) = MONTH(CURDATE()))

可以使用适当的函数确定给定日期的一周中的哪一天,因此我认为没有必要在您的表中特别将星期日作为“假日”。您可能希望从一个子选择开始,检查假期表中是否有当前收入日期的记录-如果有,请应用权重0。如果不是,检查是否为周日或周六-如果是,重量为0.5磅。另外,权重为1。@Rheine您的收入表是什么样子的?你能给我们提供结构吗?@CBroe这意味着我需要一个月内每天的表,以便我可以将其与假日表一起选择,然后使用SQL函数检查它是否为星期日/星期六?你会这样做吗?@Krishnakumar实际上,收入已经是一个查询的结果,连接几个表以获得权重*比率,然后应用折扣,还有一些WHERE子句来过滤正确的收入类型。谢谢,但还有一个问题,即所需的天数实际上是本月迄今为止的天数,不是一个月的总工作日。例如,如果是今天(9月7日),它将是4,5,明天它将是5,5,等等…如果这是您要寻找的答案,请将其标记为正确:)谢谢,它工作得很好!还有一件事——我使用的是HeidiSQL,它不允许我做减法(SELECT DAY(CURDATE())-SELECT(SUM(holiday_weight)),所以我需要单独保存结果,然后在其他地方减法。有什么解决方法吗?