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