2012-06-13 2 views
0

SQL 데이터베이스에 회계 연도 값이 포함 된 열이 있습니다. 회계 연도는 10 월 1 일부터 다음 해 9 월 30 일까지 시작됩니다. 예를 들어 현재 회계 연도는 2011-2012 또는 "2011"입니다. 데이터베이스에서 날짜를 가져 오는 계산이 필요합니다.ASP.NET 용 SQL 계산

내 테이블에 날짜가 포함 된 열이 있습니다 (예 : 05/04/2012). 선택한 회계 연도의 날짜를 가져올 계산이 필요합니까? 따라서 2002 년 회계 연도가 필요할 것입니다.

이 모든 것이 사용자가 원하는 회계 연도를 선택하는 ASP.NET 페이지에 연결됩니다. 보고 싶은 정보가있는 gridview가 나타납니다. 따라서 2010 회계 연도를 선택할 경우 Gridview로 가져온 데이터는 2010 년 10 월 1 일부터 2010 년 9 월 30 일까지의 모든 레코드 여야합니다. 도움을 주셔서 감사합니다, 나는 (SQL 초보자) 어디서부터 시작 해야할지 확실하지 않기 때문에 아직 아무것도 시도하지 않았습니다.

답변

3

당신 석 달 추가하여 회계 연도를 찾을 수 있습니다 : 회계 연도 2011 년에 모든 항목을 선택 그래서

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

을 시도 :

select * 
from YourTable as yt 
where year(dateadd(month,3,yt.TransactionDt)) = 2011 
+0

위대한 작품! 감사! – developthestars

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); 

그런 다음 당신은 예를 들어 저장 프로 시저에이 두 PARAMS을 통과 할 수 있으며,

WHERE date BETWEEN @FiscalYearStart AND @FiscalYearEnd 

N.B.으로 테이블을 쿼리 00 : FiscalYearEnd 그것이 YYYY-10-01T00로 표현 될 것이다, 10 년 10 년 + 1이어야한다 00, 또는 전체 9월 30일 당신은 그것을 쿼리 수

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);