2017-09-07 52 views
1

我需要使用MySQL計算一個月或當前日期的工作天數。MySql-月或加權假期的工作日數

工作日內稱重這樣:
週一至週五:1
星期六: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嗎?如果需要的話,我可以在星期六添加星期六到t_holiday。

+0

可以使用適當的函數來確定每週的指定日期的第二天 - 所以我不認爲有任何需要具體有周日爲「假日」在你身上r表。您可能希望從子查詢開始檢查您的假期表中是否存在當前收入日期的記錄 - 如果是,則應用權重0.如果不是,請檢查週日或週六是否爲0.5重量。另外,權重爲1. – CBroe

+0

@Rheine你的收入表是怎樣的?你能給我們這個結構嗎? – Krishnakumar

+0

@CBroe所以這意味着我需要在最新的月份中有一張表,以便我可以用假期表對它進行選擇,然後使用SQL函數檢查它是星期日/星期六?那會是你如何去用它? – Rheine

回答

1

是的,可能的。你想要的是
數個工作日的=天數的月份數 - 假日 - 週六(未節假日)* 0.5

我能想到的最簡單的方法是:
1.是有假日表t_holiday
2.將星期六在節假日表t_holiday
3.將另一列holiday_weight,其中holiday_weight用於正常假日或星期日= 1,和假日星期六的重量爲 = 0.5。

因此,你的答案會是數個工作日的=月份天數 - 數(假日*重)

在SQL中說,二月份,這將是:

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

謝謝,但是事實上,所需天數實際上是月份至今,而不是一個月的總工作日。例如,如果是今天(9月7日),它將是4,5,明天將是5,5,等等...... – Rheine

+0

有效點,我將編輯答案來表示這個 – mrateb

+0

如果這是你正在尋找的答案,請將其標記爲正確:) – mrateb