在我的SQL数据库中,我有一列包含会计年度值。财政年度从10月1日开始到次年9月30日。例如,当前财政年度是 2011-2012 或"2011"。我需要一个计算来从我的数据库中提取日期。
我的表中有一列包含日期(即 05/04/2012),我需要计算来提取所选会计年度的日期?因此,当我需要查看日期 02/14/2003 的数据时,我需要 2002 财年。
这一切都与我的 ASP.NET 页面有关,用户在其中选择他们要查看的财政年度,并显示包含所需信息的网格视图。因此,如果我选择 2010 财年,则拉入网格视图的数据应该是 2010 年 10 月 1 日到 2011 年 9 月 30 日的所有记录。感谢您的帮助,我还没有尝试任何东西,因为我不确定从哪里开始(sql 新手)。
您可以通过添加三个月来查找会计年度:
year(dateadd(month,3,'2011-09-30'))
因此,要选择 2011 财年的所有条目,请尝试:
select *
from YourTable as yt
where year(dateadd(month,3,yt.TransactionDt)) = 2011
我假设你正在使用SqlParameters将数据发送到SQL Server。然后:
int fiscal_year = 2002;
SqlParameter fyStart = new SqlParameter("@FiscalYearStart",
SqlDbType.DateTime);
fyStart.Value = new SqlDateTime(fiscalYear, 10, 01);
SqlParameter fyEnd = new SqlParameter("@FiscalYearEnd",
SqlDbType.DateTime);
fyEnd.Value = new SqlDateTime(fiscalYear+1, 10, 01);
然后,例如,可以将这两个参数传递给存储过程,并使用以下命令查询表
WHERE date BETWEEN @FiscalYearStart AND @FiscalYearEnd
注意:财政年度结束应为 10-Oct-YEAR+1,因为它将表示为 YYYY-10-01T00:00:00,或将包括整个 9 月 30 日。
你可以查询它:
SELECT *
FROM YourTable
WHERE YourTableDate >= CAST(@FiscalYear AS CHAR(4)) + '-10-01'
AND YourTableDate < CAST(@FiscalYear + 1 AS CHAR(4)) + '-10-01';
或者,如果您需要灵活性,也可以使用一个与会计年度联接的日期范围表。 这使您能够为多个租户或公司创建多个会计年度定义,或者允许在不更改查询的情况下更改定义。 然后,您可以根据需要加入此表以筛选结果。
CompanyID FiscalYear StartDate EndDate
1 2010 2010-10-01 2011-09-30
1 2011 2011-10-01 2012-09-30
2 2010 2010-01-01 2011-12-31
2 2011 2011-01-01 2012-12-31
SELECT *
FROM YourTable t
INNER JOIN FiscalYear y
ON y.FiscalYear = t.FiscalYear
WHERE t.YourTableDate >= y.StartDate AND t.YourTableDate < DATEADD(d, 1, y.EndDate);