0

在我的 SQL 数据库中,我有一列包含会计年度值。会计年度从 10 月 1 日开始至次年的 9 月 30 日。例如,当前会计年度是 2011-2012 或“2011”。我需要一个计算来从我的数据库中提取日期。

我的表中有一个包含日期的列(即 2012 年 5 月 4 日),我需要一个计算来提取所选会计年度的日期吗?因此,当我需要查看 02/14/2003 日期的数据时,我需要 2002 财年。

这一切都与我的 ASP.NET 页面相关联,用户在该页面中选择他们想要查看的会计年度,并显示一个带有请求信息的网格视图。因此,如果我选择 2010 财年,则拉入 gridview 的数据应该是从 10/01/2010 到 09/30/2011 的所有记录。感谢您的帮助,我还没有尝试任何东西,因为我不确定从哪里开始(sql新手)。

4

3 回答 3

3

您可以通过添加三个月来找到会计年度:

year(dateadd(month,3,'2011-09-30'))

因此,要选择 2011 财年的所有条目,请尝试:

select  *
from    YourTable as yt
where   year(dateadd(month,3,yt.TransactionDt)) = 2011
于 2012-06-13T12:13:45.960 回答
1

我假设您正在使用 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

NB FiscalYearEnd 应该是 10-Oct-YEAR+1,因为它将表示为 YYYY-10-01T00:00:00,或者将包括整个 9 月 30 日。

于 2012-06-13T12:17:26.667 回答
1

你可以查询它:

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);
于 2012-06-13T12:18:06.577 回答