您如何从SQL Server视图中的日期字段计算会计年度?
答案 0 :(得分:18)
我建议您根据应用程序的会计年度使用用户定义的函数。
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
像这样使用:
SELECT dbo.fnc_FiscalYear('9/1/2009')
SELECT dbo.fnc_FiscalYear('8/31/2009')
答案 1 :(得分:9)
以下是澳大利亚财政年度开始日期代码
select DATEADD(dd,0, DATEDIFF(dd,0, DATEADD( mm,
-(((12 + DATEPART(m, getDate())) - 7)%12), getDate() )
- datePart(d,DATEADD( mm, -(((12 + DATEPART(m, getDate())) - 7)%12),getDate() ))+1 ) )
它返回'2012-07-01 00:00:00.000'
答案 2 :(得分:8)
CASE WHEN MONTH(@Date) > 10 THEN YEAR(@Date) + 1 ELSE YEAR(@Date) END
答案 3 :(得分:6)
CASE
WHEN MONTH(Date) > 6
THEN YEAR(Date) + 1
ELSE YEAR(Date)
END AS [FISCAL YEAR]
在这种情况下,会计年度从7/1开始。这是最简单的解决方案。
答案 4 :(得分:2)
我已经扩展了ChrisF和Conficker发布的答案。
Array //$args
(
[post_status] => publish
[posts_per_page] => 6
[ignore_sticky_posts] => 1
[post_type] => post
[meta_key] => _thumbnail_id
[suppress_filters] =>
[] => Array
(
[0] => Array
(
[taxonomy] => category
[field] => id
[terms] => Array
(
)
)
)
)
$carousel_query = new WP_Query( $args );
if ( $carousel_query->have_posts() ) :
while ( $carousel_query->have_posts() ) : $carousel_query->the_post();
........
endwhile;
endif;
答案 5 :(得分:1)
此案例的最简单表达式:
YEAR(DATEADD(month, 3, Date))
财政年度是联邦政府的会计期间。它从10月1日开始,到下一个日历年的9月30日结束。每个会计年度都以其结束的日历年来标识,通常称为“FY”。例如,2003财年从2002年10月1日开始,到2003年9月30日结束......其目的是为国会提供更多时间来处理拨款立法,特别是为了避免继续解决。
答案 6 :(得分:1)
DECLARE @DateFieldName DATETIME = '1/1/2020'
--UK Fiscal Year
SELECT
CASE
WHEN MONTH(@DateFieldName) in (1,2,3)
THEN CONCAT(YEAR(@DateFieldName) -1 , '-' , YEAR(@DateFieldName) )
ELSE CONCAT(YEAR(@DateFieldName) , '-' , YEAR(@DateFieldName)+1 )
END AS [FISCAL YEAR]
--RESULT = '2019-2020'
答案 7 :(得分:1)
我刚才意识到Brett Veenstra的明确回答是错误的。不应该这样计算风险吗?:
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;
答案 8 :(得分:1)
我认为你不能,因为没有通用的财政日程表。财政年度因企业和国家而异。
ADDENDUM:您需要做的是拥有一个单独的数据库表,其中包含每个适用年份的财务开始日期和财务结束日期。使用该表中的数据计算给定特定日期的会计年度。
答案 9 :(得分:1)
鉴于@FiscalYearStartMonth
是您的会计年度开始月份(数字)
并且@Date
是相关日期,请执行以下操作:
SELECT
CASE
WHEN @FiscalYearStartMonth = 1 OR @FiscalYearStartMonth > MONTH(@Date)
THEN YEAR(@Date)
ELSE YEAR(@Date) + 1
END AS FiscalYear
您可以在函数中将其抽象化,或者在派生视图中用作列
答案 10 :(得分:1)
您需要多个字段才能执行此操作...
您应该检查您的会计年度定义,因为它因公司而异
答案 11 :(得分:0)
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
答案 12 :(得分:0)
会计年度开始:
DATEADD(MONTH, DATEDIFF(MONTH, '20100401', getdate()) / 12 * 12, '20100401')
财政年度结束:
DATEADD(MONTH, DATEDIFF(MONTH, '20100401', getdate()) / 12 * 12, '20110331')
如果需要,将getdate()
替换为您自己的日期
答案 13 :(得分:0)
DECLARE
@StartDate DATETIME,
@EndDate DATETIME
if month(getdate())>3
Begin
set @StartDate= convert(datetime, cast(year(getdate())-1 as varchar) + '-4-1')
set @EndDate= convert(datetime, cast(year(getdate()) as varchar) + '-3-31')
end
else
begin
set @StartDate= Convert(datetime, cast(year(getdate()) - 2 as varchar) + '-4-1')
set @EndDate= convert(datetime, cast(year(getdate())-1 as varchar) + '-3-31')
end
select @StartDate, @EndDate
答案 14 :(得分:0)
以下是英国的动态代码,
您可以根据不同的需求进行解决,
DECLARE @StartDate DATETIME
DECLARE @EndDate DATETIME
SET @StartDate = DATEADD(dd, 0,
DATEDIFF(dd, 0,
DATEADD(mm, - (((12 + DATEPART(m, getDate())) - 4)%12), getDate()) -
datePart(d,DATEADD(mm, - (((12 + DATEPART(m, getDate())) - 4)%12),
getDate() )) + 1 ))
SET @EndDate = DATEADD(SS, -1, DATEADD(mm, 12, @StartDate))
SELECT @StartDate, @EndDate
答案 15 :(得分:0)
这是我的版本,它返回财政年度为FYyyyy - 财政年度开始7/1
即。 2015年6月1日 - &gt; 2015财年,2015年7月1日 - &gt; FY1516
字符串函数可能更好......
CREATE FUNCTION [dbo].[FY](@DATE DATETIME)
RETURNS char(6)
AS
BEGIN
DECLARE @Answer char(6)
SET @Answer =
CASE WHEN MONTH(@DATE) < 7
THEN 'FY' + RIGHT(CAST(YEAR(@DATE) - 1 AS VARCHAR(11)), 2) + RIGHT(CAST(YEAR(@DATE) AS VARCHAR(11)), 2)
ELSE 'FY' + RIGHT(CAST(YEAR(@DATE) AS VARCHAR(11)), 2) + RIGHT(CAST(YEAR(@DATE) + 1 AS VARCHAR(11)), 2) END
RETURN @Answer
END
答案 16 :(得分:0)
在上述@ csaba-toth的答案的基础上,并假设您的会计年度从该月的第一天开始
year(dateadd(month, (12 -
FyStartMonth + 1), <date>)
我的财年开始于第7个月的7月1日,因此我的常数是(12- 7 + 1 =)6。
测试用例(截至2019年9月25日):
select year(dateadd(month, 6, getdate()))
, year(dateadd(month,6, '1/1/2020'))
, year(dateadd(month, 6, '7/1/2020'))
, year(dateadd(month, 6, '6/30/2020'))
返回:
2020 2020 2021 2020
我相信这是最简单,也许也是最易理解的实现。
答案 17 :(得分:-1)
澳大利亚人更简单:)
(年(DATEADD(月, - ((DATEPART(月,[日期])+ 5)%12),[日期]))+)AS Financial_Year
答案 18 :(得分:-1)
简单的方法 -
DECLARE @DATE DATETIME ='2016/07/1'
- 财政开始
SELECT CONVERT(DATETIME,(CAST(年(@DATE) - IIF(月(@DATE)&gt; 6,0,1)AS VARCHAR)+' - 7-1'))
- 财政结束 SELECT CONVERT(DATETIME,(CAST(年(@DATE)+ IIF(月(@DATE)&gt; 6,1,0)AS VARCHAR)+' - 6-30'))