2017-10-17 75 views
0

我期待計算一個員工如果在年中開始直到本財年結束時(4月1日 - 3月31日)工作了多少個星期)。動態計算到該日期的會計年度和週末結束

例如,一名員工在01/10/2017(英國日期)開始在該公司工作我需要計算他們將工作到31/03/2018(含)的週數。

員工開始日期的字段爲表'Employee'的'START_DATE'。我還有一個日曆表,包含您可以想象的每種日期格式,並且還包含會計年度。

我發現這個問題,但它並沒有完全解決我的問題:Calculate totals of field based on current fiscal year only - SQL

任何幫助非常讚賞。

回答

1

這取決於你如何分類一週。它是否需要整整一週?從非星期一的一天開始是否意味着如果他們在不是星期五的一天結束,那麼它不會算作整整一週? 這是您必須識別您的業務邏輯的地方。

這裏有一些基本的DATEDIFF操作,您可以使用兩個日期,你可以以此爲基礎使用您的計算之間計算出的差異:

DECLARE @startDate DATE = '2017-10-01' 
DECLARE @endDate DATE = '2018-03-31' 

SELECT @startDate StartDate, @endDate EndDate, 
     DATEDIFF(DAY, @startDate, @endDate) DaysPassed, 
     DATEDIFF(WEEK, @startDate, @endDate) WeeksWorked, 
     DATEDIFF(DAY, @startDate, @endDate)/7.0 CalculatedWeeksWorked 

產地:

StartDate EndDate DaysPassed WeeksWorked CalculatedWeeksWorked 
---------- ---------- ----------- ----------- --------------------- 
2017-10-01 2018-03-31 181   25   25.857142 

此外,您可能需要考慮除週末外的工作天數,以計算完整工作週數,如果是這樣,請查看此文章:

get DATEDIFF excluding weekends using sql server

財年

摸出財年,你應該能夠簡單地看日期,像這樣的月份值:

DECLARE @startDate DATE = '2017-10-01'; 

-- if the month is greater than 3, add a year, else take the current year 
SELECT CASE 
      WHEN DATEPART(MONTH, @startDate) > 3 THEN 
       CAST(DATEPART(YEAR, @startDate) + 1 AS VARCHAR(10)) + '-03-31' 
      ELSE 
       CAST(DATEPART(YEAR, @startDate) AS VARCHAR(10)) + '-03-31' 
     END AS fiscalYearEnd; 

編輯@startDate並測試以上,它應該有望在大多數情況下工作。我給了它一個快速測試,它似乎返回預期的結果。

+0

感謝您的回覆。雖然這會起作用,但問題在於沒有「結束日期」,「結束日期」是本財年的最後一天,這正是我在解決問題時所遇到的問題(如我正在撰寫的報告將來會持續多年)。所以我需要弄清楚的是如何根據「開始日期」來計算會計年度結束日期。 –

+0

@ADicks看到我的更新。 – Tanner

+0

太棒了!我已經很快測試過了,它似乎表現出色。謝謝。 –

0

DATEDIFF function

ROUND(DATEDIFF(CURRENT_TIMESTAMP, START_DATE)/7, 0) AS weeks 

其中0是十進制數。

WEEKS的問題在於它不會爲1月1日的日期返回正確的結果。

+0

不幸的是,這不考慮財政年度。財年(4月1日至3月31日)爲假期。 –