动态计算到该日期的会计年度和周的结束

时间:2017-10-17 09:48:48

标签: sql sql-server

我想计算一名员工从中年开始到本财政年度结束时(4月1日 - 3月31日)将工作多少周。

例如,一名员工于2017年10月1日(英国约会)开始在公司工作我需要计算他们工作的周数,直到2017年3月31日(含)。

员工开始日期的字段是' START_DATE'来自表'员工'。我还有一个日历表,其中包含您可以想象的每种日期格式,还包括会计年度。

我发现了这个问题,但它并没有解决我的问题:Calculate totals of field based on current fiscal year only - SQL

任何帮助都非常感激。

2 个答案:

答案 0 :(得分: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并测试上述内容,它应该适用于大多数情况。我已经给它一个快速测试,它似乎返回了预期的结果。

答案 1 :(得分:0)

DATEDIFF function

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

其中0是十进制数。

WEEKS的问题在于它不会在1月1日之前的日期返回正确的结果。