按照印度财政年度的 DayOfYear

Rav*_*mar 4 sql-server t-sql

我想根据印度财政年度得到一个序列号。我尝试使用 SQL 内置函数编写一个函数:

DATEPART(DAYOFYEAR,'2015-04-01')

但我面临着在整个财政年度获得天数的挑战。

对于 2015 财政年度:第一天是“2015-04-01”,最后一天是“2016-03-31”。

注意:对于这个时期,我的财政年度 2015 是闰年,应该有 366 天。

Dan*_*her 10

一年中从 4 月 1 日开始的一天的序号可以这样计算:

SELECT 1+
       DATEDIFF(day,
           DATEFROMPARTS(
               DATEPART(year, DATEADD(month, -3, [Date])),
               4,
               1),
           [Date]) AS FYdayNumber
FROM tableWithDates;
Run Code Online (Sandbox Code Playgroud)

本质上,我们从当前日期减去三个月,然后使用该年份创建一个年初日期(year , april, 1 ),然后计算该年初日期和日期之间的天数当前日期。最后,加 1 以使序列从 1 开始。

如果您只想要会计年度的第一天,您可以使用

SELECT DATEFROMPARTS(
           DATEPART(year, DATEADD(month, -3, [Date])),
           4,
           1) AS firstDayOfFY
FROM tableWithDates;
Run Code Online (Sandbox Code Playgroud)

正如@MarkSinkinson 在另一个答案中指出的那样,出于性能和并行化的原因,避免(用户定义的)标量函数。