仅适用于当前财务年度的动态SQL

时间:2012-01-30 14:36:40

标签: sql sql-server date reporting-services ssrs-2008

我有一个数据库,其中包含两个我关注的日期。

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日恢复数据,依此类推。

可以提出一些代码或指出我忽略的任何规则吗?

3 个答案:

答案 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_startfinancial_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日。