CREATE FUNCTION dbo.fnc_FiscalYear(
@AsOf DATETIME
)
RETURNS INT
AS
BEGIN
DECLARE @Answer INT
-- You define what you want here (September being your changeover month)
IF ( MONTH(@AsOf) < 9 )
SET @Answer = YEAR(@AsOf) - 1
ELSE
SET @Answer = YEAR(@AsOf)
RETURN @Answer
END
GO
CREATE FUNCTION dbo.fnc_FiscalYear(
@AsOf DATETIME
)
RETURNS INT
AS
BEGIN
DECLARE @Answer INT
IF ( MONTH(@AsOf) < 9 )
SET @Answer = YEAR(@AsOf)
ELSE
SET @Answer = YEAR(@AsOf) + 1
RETURN @Answer
END;
declare
@InputDate datetime,
@FiscalInput varchar(2),
@FiscalYear varchar(4),
@FiscalMonth varchar(2),
@FiscalStart varchar(10),
@FiscalDate varchar(10)
set @FiscalInput = '10'
set @InputDate = '1/5/2010'
set @FiscalYear = (select
case
when datepart(mm,@InputDate) < cast(@FiscalInput as int)
then datepart(yyyy, @InputDate)
when datepart(mm,@InputDate) >= cast(@FiscalInput as int)
then datepart(yyyy, @InputDate) + 1
end FiscalYear)
set @FiscalStart = (select @FiscalInput + '/01/' + @FiscalYear)
set @FiscalDate = (select cast(datepart(mm,@InputDate) as varchar(2)) + '/' + cast(datepart(dd,@InputDate) as varchar(2)) + '/' + @FiscalYear)
set @FiscalMonth = (select
case
when datepart(mm,@InputDate) < cast(@FiscalInput as int)
then 13 + datediff(mm, cast(@FiscalStart as datetime),@InputDate)
when datepart(mm,@InputDate) >= cast(@FiscalInput as int)
then 1 + datediff(mm, cast(@FiscalStart as datetime), @FiscalDate)
end FiscalMonth)
select @InputDate as Date,
cast(@FiscalStart as datetime) as FiscalStart,
dateadd(mm, 11,cast(@FiscalStart as datetime)) as FiscalStop,
cast(@FiscalDate as DateTime) as FiscalDate,
@FiscalMonth as FiscalMonth,
@FiscalYear as FiscalYear
20条答案
按热度按时间9cbw7uwe1#
我建议您使用基于应用程序的会计年度的用户定义函数。
按如下方式使用它:
gzjq41n42#
nhaq1z213#
以下是澳大利亚财政年度开始日期代码
它像
'2012-07-01 00:00:00.000'
一样返回2guxujil4#
In this case, Fiscal Year starts on 7/1. This is the simplest solution out there.
2ic8powd5#
我已经扩展了ChrisF和Conficker发布的答案。
ac1kyiln6#
本例的最简单表达式:
YEAR(DATEADD(month, 3, Date))
联邦财政年度
财政年度是联邦政府的会计期间。它从10月1日开始,到下一个历年的9月30日结束。每个财政年度由其结束的日历年度标识,通常被称为“FY”。例如,2003财年从2002年10月1日开始,到2003年9月30日结束...这样做的目的是让国会有更多的时间来处理拨款立法,特别是避免持续的决议。
这可能不适用于美国以外的其他国家和地区,但你只需根据需要替换数字3。
bnlyeluc7#
我认为你做不到,因为没有通用的会计日历。会计年度因企业和国家而异。
附录:您需要做的是有一个单独的DB表,其中包括每个适用年度的财务开始日期和财务结束日期。使用该表中的数据来计算给定特定日期的会计年度。
vi4fp9gy8#
要做到这一点,你需要的不只是一个领域。
你应该检查你对财政年度的定义,因为不同的公司它是不同的
hivapdat9#
假定
@FiscalYearStartMonth
是您的财政年度开始月份(数字),@Date
是有问题的日期,请执行以下操作:您可以在函数中省略这一点,或用作派生视图中的列
bcs8qyzn10#
我刚刚意识到Brett Veenstra标出的答案是错误的。财年不应该是这样计算的吗?
yrwegjxp11#
基于@Csaba-Toth上面的答案,并假设您的财政年度从每月的第一天开始
year(dateadd(month, (12 -
FyStartMonth+ 1), <date>)
我的财年从7月1日开始,也就是第7个月,所以我的常量是(12-7+1=)6。
测试用例(截至2019年9月25日):
返回:
我相信这是最简单,也可能是最容易理解的实现。
ou6hu8tu12#
pb3s4cty13#
过去一年,开始日期为
oct 1st 10-1-2021
代码:
dojqjjoe14#
lf5gs5x215#
以下是英国的动态代码,
您可以根据不同的需求来解决问题,