动态计算截至该日期的财政年度结束和周数

Posted

技术标签:

【中文标题】动态计算截至该日期的财政年度结束和周数【英文标题】:Dynamically calculate end of fiscal year(s) and weeks to that date 【发布时间】:2017-10-17 09:48:47 【问题描述】:

我正在计算如果员工从年中开始工作到当前财政年度结束(4 月 1 日至 3 月 31 日),他们将工作多少周。

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

员工开始日期的字段是“员工”表中的“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 并测试上述内容,希望它适用于大多数情况。我已经对其进行了快速测试,它似乎返回了预期的结果。

【讨论】:

感谢您的回复。虽然这会起作用,但问题是没有“结束日期”,“结束日期”是当前财政年度的最后一天,这是我在搞清楚时遇到的问题(正如我正在写的报告未来将持续多年)。所以我需要弄清楚的是如何根据“开始日期”计算财政年度结束日期。 太棒了!我已经快速进行了测试,它似乎工作得很好。谢谢。【参考方案2】:

DATEDIFF function:

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

其中 0 是小数位数。

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

【讨论】:

不幸的是,这没有考虑财政年度。节假日紧随财政年度(4 月 1 日至 3 月 31 日)。

以上是关于动态计算截至该日期的财政年度结束和周数的主要内容,如果未能解决你的问题,请参考以下文章

仅适用于当前财政年度日期的动态 SQL

数学计算财政年度 5-4-4 时间表

获取财政年度查询中的动态日期范围的逻辑

财政年度从 4 月开始,但我想使用 ISO 2018 日历年的第 14 周到 2019 日历年的第 13 周

计算财政年度和季度

ANSI SQL 按(印度)财政年度 YTD 分组 - (过去 5 年 YTD)