我有一个数据库,其中包含两个我关注的日期。
StartDate + 结束日期
这些日期以下列格式存储:
2008-06-23 00:00:00.000
我需要添加一段动态SQL才能恢复当前财政年度的日期。
所以例如01/04/2011 - 31/03/2012将是本财政年度。
因此,任何结束的记录都在这些日期之内,或者NULL被归类为“活跃”
年份部分需要具有活力,因此,一旦它到达2012年4月1日,我们将进入新的财政年度,并将从2012年4月1日至2013年3月31日恢复数据,依此类推。
可以提出一些代码或指出我忽略的任何规则吗?
答案 0 :(得分:3)
尝试:
...
where StartDate >=
case
when month(getdate()) > 3
then convert(datetime, cast(year(getdate()) as varchar) + '-4-1')
else
convert(datetime, cast(year(getdate()) - 1 as varchar) + '-4-1')
end
and (EndDate is null or EndDate <
case
when month(getdate()) > 3
then convert(datetime, cast(year(getdate()) + 1 as varchar) + '-4-1')
else
convert(datetime, cast(year(getdate()) as varchar) + '-4-1')
end)
答案 1 :(得分:2)
我们走了:))
动态解决方案,
DECLARE @MyDate DATETIME
SET @MyDate = getDate()
DECLARE @StartDate DATETIME
DECLARE @EndDate DATETIME
SET @StartDate = DATEADD(dd,0, DATEDIFF(dd,0, DATEADD( mm, -(((12 + DATEPART(m, @MyDate)) - 4)%12), @MyDate ) - datePart(d,DATEADD( mm, -(((12 + DATEPART(m, @MyDate)) - 4)%12),@MyDate ))+1 ) )
SET @EndDate = DATEADD(ss,-1,DATEADD(mm,12,@StartDate ))
SELECT @StartDate,@EndDate
答案 2 :(得分:1)
创建一个Finacial_Year
查找表,其中包含字段financial_year_start
和financial_year_end
。
使用下一个50年的数据填充它(使用电子表格来计算日期很容易)。
使用enddate
SELECT ...
FROM Your_Table LEFT JOIN Financial_Year
ON Your_Table.enddate BETWEEN Financial_Year.financial_year_start
AND Financial_Year.financial_year_end
WHERE Your_Table.enddate IS NULL -- Active
OR (getdate() BETWEEN Financial_Year.financial_year_start
AND Financial_Year.financial_year_end)
当前日期介于接下来的两个日期之间时,当前财务将自动更改。
BTW英国财政年度从06-04-YYYY到05-04-YYYY,而不是从1日到31日。