这取决于你如何分类一周。它是否需要整整一周?从非星期一的一天开始是否意味着如果他们在不是星期五的一天结束,那么它不会算作整整一周? 这是您必须识别您的业务逻辑的地方。
这里有一些基本的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
并测试以上,它应该有望在大多数情况下工作。我给了它一个快速测试,它似乎返回预期的结果。
感谢您的回复。虽然这会起作用,但问题在于没有“结束日期”,“结束日期”是本财年的最后一天,这正是我在解决问题时所遇到的问题(如我正在撰写的报告将来会持续多年)。所以我需要弄清楚的是如何根据“开始日期”来计算会计年度结束日期。 –
@ADicks看到我的更新。 – Tanner
太棒了!我已经很快测试过了,它似乎表现出色。谢谢。 –