每年我都要更新我公司的财务报告,以包括新的财政年度(因为年份与日历年不同),所以我做.....
Case
when ST_date >= '1996.11.01 00:00:00' and st_date < '1997.11.01 00:00:00'
then '96-97'
[etc]
end as year,
每年我都要记住我需要修改哪些报告 - 大多数时候我忘记了一个报告!
......有一种简单的动态方法可以确定吗?
答案 0 :(得分:6)
您绝对可以在SQL Server中编写一个简单的存储函数,以根据日期确定财务年度:
CREATE FUNCTION dbo.GetFinancialYear (@input DATETIME)
RETURNS VARCHAR(20)
AS BEGIN
DECLARE @FinYear VARCHAR(20)
SET @FinYear =
CASE
WHEN @INPUT >= '19961101' AND @input < '19971101' THEN '96-97'
WHEN @INPUT >= '19971101' AND @input < '19981101' THEN '97-98'
ELSE '(other)'
END
RETURN @FinYear
END
然后在您的所有查询中使用它。
SELECT
somedate, dbo.GetFinancialYear(somedate)
......
如果您需要添加新的财政年度 - 只需更新一个功能,您就完成了!
更新:如果你想让这个完全动态,你可以依赖,因为财政年度总是从11月开始1 - 然后使用这种方法:
CREATE FUNCTION dbo.GetFinancialYear (@input DATETIME)
RETURNS VARCHAR(20)
AS BEGIN
DECLARE @FinYear VARCHAR(20)
DECLARE @YearOfDate INT
IF (MONTH(@input) >= 11)
SET @YearOfDate = YEAR(@input)
ELSE
SET @YearOfDate = YEAR(@input) - 1
SET @FinYear = RIGHT(CAST(@YearOfDate AS CHAR(4)), 2) + '-' + RIGHT(CAST((@YearOfDate + 1) AS CHAR(4)), 2)
RETURN @FinYear
END
这将返回:
05/06
代表2005-11-25
04/05
代表2005-07-25
答案 1 :(得分:2)
看一下这个例子:
declare @ST_Date datetime = '20120506'
SELECT
convert(char(2),DateAdd(m,-10,@ST_DATE),2)+'-'+
convert(char(2),DateAdd(m,+ 2,@ST_DATE),2) as year
作为列表达式:
convert(char(2),DateAdd(m,-10,ST_DATE),2)+'-'+
convert(char(2),DateAdd(m,+ 2,ST_DATE),2) as year
非常琐碎!
我处理这些问题(财政年度,支付期等)的方式是认识到财务年度与任何一年相同的事实,除了他们在X个月后开始。因此,直接的解决方案是将财政年度转移回日历年,从中进行任何“年度”比较或推算“年”(或“月”)。
答案 2 :(得分:1)
Declare @FinancialMonth Varchar(100)=NULL,@Month smallint,@Date DateTime='04/06/2013'
BEGIN TRY
SELECT @FinancialMonth='01-'+IsNULL(@FinancialMonth,'April')+'-'+Cast(year(getdate()) as varchar)
SELECT @Month=(Month(Cast(@FinancialMonth as datetime))-1) * -1
END TRY
BEGIN CATCH
SELECT
ERROR_NUMBER() AS ErrorNumber,'Invalid Financial Month' ErrorMessage
END CATCH
SELECT Month((CONVERT([varchar](10),dateadd(month,(@Month),@Date),(101)))) FinancialMonth,
Year((CONVERT([varchar](10),dateadd(month,(@Month),@Date),(101)))) FinancialYear
,DatePart(qq,(CONVERT([varchar](10),dateadd(month,(@Month),@Date),(101)))) FinancialQuarter
答案 3 :(得分:0)
这个适用于我并将其设置为实际的FY结束日期。
SET @enddatefy = convert(DATE, str(datepart(yyyy,DateAdd(m,-6,@enddate))+1)+'0630',112)
SET @enddatefyid = str(datepart(yyyy,DateAdd(m,-6,@enddate))+1)+'0630'
答案 4 :(得分:0)
datename(YEAR, DATEADD(M,-3,Date)) +'-'+ cast((datepart(YEAR, DATEADD(M,-3,Date)) + 1) %100 as varchar(2))
计算列&#39;日期&#39;
财政年度范围从4月1日到3月31日
答案 5 :(得分:0)
Create FUNCTION dbo.GetFinancialYear (@input DATETIME)
RETURNS VARCHAR(20)
AS BEGIN
DECLARE @FinYear VARCHAR(20)
IF (MONTH(@input) > 3)
SET @FinYear = RIGHT(CAST(Year(@input) AS CHAR(4)), 4) + '-' + RIGHT(CAST((Year(@input) + 1) AS CHAR(4)), 2)
ELSE
SET @FinYear = RIGHT(CAST((Year(@input) - 1) AS CHAR(4)), 4) + '-' + RIGHT(CAST(Year(@input) AS CHAR(4)), 2)
RETURN @FinYear
END
答案 6 :(得分:0)
Declare @date1 datetime = '2017-07-01'
Select Case
When Month(@date1)>=7 Then 'FY'+Convert(NVARCHAR(10),(Right(year(getdate()),2)+1))
Else 'FY'+Convert(NVARCHAR(10),(Right(year(getdate()),2)))
End
答案 7 :(得分:-1)
这适用于我,即财政年度从7月开始。
CASE WHEN DatePart(mm, [YourDate]) >= 7
THEN convert(varchar(10), YEAR([YourDate])) +' / '+ Convert(varchar(10), YEAR([YourDate]) + 1 )
ELSE Convert(varchar(10), YEAR([YourDate]) - 1) +' / '+ Convert(varchar(10), YEAR([YourDate]) )
END AS [Financial Year],