[英]SQL Function for Financial Day of the year
如何獲取一年中的財務日,即如果我在4月2日通過該函數,則應返回2。財務年度始於每年的4月1日。
財務日歷是特定於組織的,盡管很少,但可以更改。 最簡單的解決方案是創建一個概述財政日歷的表。 因此,您可以使用CTE進行模擬,但最好將其存儲為表。
With FiscalCalendarStarts As
(
Select 1 As FiscalPeriod
, Cast('20120401' As DateTime) As StartDate
Union All
Select FiscalPeriod + 1
, Case
When Month(StartDate) = 12 Then DateAdd(m, Month(StartDate) - 12 + 1, StartDate)
Else DateAdd(m, 1, StartDate)
End
From FiscalCalendarStarts
Where FiscalPeriod < 12
)
, FiscalCalendar As
(
Select FiscalPeriod
, StartDate
, DateAdd(d, -1, DateAdd(m, 1, StartDate)) As EndDate
From FiscalCalendarStarts
)
Select *
From FiscalCalendar
Where @SomeDate Between StartDate And EndDate
編輯
要獲取天數(我承認我在上述解決方案中未提供),訣竅是根據輸入日期確定實際會計年度開始日期。 為此,您可以執行以下操作,根據您的要求,我已將其放入一個函數中
Create Function dbo.FiscalDay ( @Input datetime )
Returns int
As
Begin
Declare @StartDayMonth char(4);
Set @StartDayMonth = '0401';
Return (
Select DateDiff(d, FYStartDate, @Input) + 1
From (
Select DateAdd(yyyy
, Case
When DatePart(dy, @Input) >= DatePart(dy, StartDate) Then 0
Else -1
End
, StartDate) As FYStartDate
From (
Select Cast( Cast(Year(@Input) As char(4))
+ @StartDayMonth As datetime ) As StartDate
) As S1
) As S
)
End
我從存根0401
開始,存根代表會計年度開始的月份和日期。 為此,我將經過日期的年份作為20120401
如果經過2012年的日期,我會得到類似20120401
。 如果@Input
遲於1月4日,則我們處於@Input
年份的新會計年度。 如果@Input
早於1月4日,則我們處於從上一年的1月4日開始的會計年度。 現在我們有了財政開始日期,我們可以簡單地找到它們之間的天數並加1(否則,將4月1日視為第0天,而不是第1天)。 請注意,由於2012年是a年,因此通過2012年3月31日返回366,而不是365。
@Olivarsham,並非每個國家都有共同的財政年度。 有些是四月至三月,有些是一月至十二月。 因此,這是您的特殊應用程序要求,然后您需要自己編寫。 我認為沒有標准的查詢。
請嘗試此功能。 這將返回您會計年度的天數。
CREATE FUNCTION [dbo].[FiscalDay] (@CurrentDATE datetime)
RETURNS int
AS
BEGIN
DECLARE @FiscalDay int;
DECLARE @YearStartDate DateTime;
Set @YearStartDate=Cast('20120401' As DateTime)
set @FiscalDay = DATEDIFF(DAY,@YearStartDate , @CurrentDATE)
RETURN(@FiscalDay);
END;
GO
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.