计算当前(澳大利亚)财政年度第一天的最有效方法是什么?
澳大利亚风云于7月1日开始。
E.g。
SELECT dbo.FinancialYearStart('30-Jun-2011')
将于2010年7月1日返回。
SELECT dbo.FinancialYearStart('01-Jul-2011')
将于2011年7月1日返回。
SELECT dbo.FinancialYearStart('02-Jul-2011')
将于2011年7月1日返回。
答案 0 :(得分:26)
一个DATEADD,一个DATEDIFF和一个部门:
SELECT DATEADD(year,DATEDIFF(month,'19010701','20110630')/12,'19010701')
基本上,你计算自某个任意财政年度开始日期以来的月数(我选择了1901年),将该数字除以12(忽略其余部分),然后将这几年加回到同一任意年份的开始日期
答案 1 :(得分:2)
我不知道这是否最有效,但它至少快......
create function dbo.FinancialYearStart
(
@CurrentDate datetime
)
returns datetime
as
begin
declare @CurrentYear int
,@FYDateThisYear datetime
,@FYDatePrevYear datetime
set @CurrentYear = datepart(year, @CurrentDate)
set @FYDateThisYear = '01-Jul-' + cast(@CurrentYear as varchar(4))
set @FYDatePrevYear = '01-Jul-' + cast(@CurrentYear-1 as varchar(4))
if @CurrentDate < @FYDateThisYear
begin
return @FYDatePrevYear
end
return @FYDateThisYear
end
答案 2 :(得分:1)
从日期中提取年份和月份。然后执行year = year + FLOOR((month-7) / 6)
那么你的约会是1-jul-year
(您实际上不需要将它们存储为变量。)
类似于:CONCATENATE('01-jul-', YEAR(date) + FLOOR((MONTH(date)-7) / 6)
答案 3 :(得分:1)
一种有点复杂的方法(可能有点过分):
SELECT
DATEADD(month,
(MONTH(GETDATE()) - 1) / 6 * 12 - 6,
CAST(CAST(YEAR(GETDATE()) AS varchar) AS datetime)
)
答案 4 :(得分:1)
笨重但是有效
select
cast('01-Apr-' +
cast(
case
when datepart(mm,getdate()) in (4,5,6,7,8,9,10,11,12)
then DATEPART(yy,getdate())
else DATEPART(yy,getdate())-1
end as varchar
) as datetime
) as fy_start
答案 5 :(得分:0)
SELECT cast(cast(YEAR(getdate())-
(case
when MONTH(GETDATE()) between 1 and 6 then 1
else 0
end) as varchar)+'0701' as date)