2010-08-19 5 views
0
내가 데이터베이스로 SQLServer에 2008을 사용하여 금융 응용 프로그램을 개발하고

를 만드는 방법에 대한 도움말 및 I 예를 들어 어떤 년의 회계 기간을 생성 할회계 연도 12 개 기간

입력 : 2010년 6월

결과가 원하는 12 시대의 2010 년 6 월의 시작일 - 5 월 -2011

기간 ................ 시작 .............................. .... ......... .. 끝 ... 1 ... ... ...... ............ 1-06-2010 ................................. 30-06-2010 2 ......... 1-07-2010 ........ ... 31-07-2010

등등 ... 2010 년 5 월까지 ... 실제로 12 개월 (12 개월)부터 시작해야합니다. 그 달의 시작일과 종료일은 월의 마지막 날이됩니다. 시나리오 2010 년 6 월 - 2011 년 5 월 ... 쿼리가됩니다. 사전

답변

1

다음은 공통 테이블 표현식을 사용하여 마침표 목록을 만드는 방법입니다. @ Fosco의 DATEADD 접근 방식을 빌리고 있습니다 (thx @ Fosco).

DECLARE @StartDate DATETIME = '06/1/2010'; 

WITH periods AS 
    (SELECT 1 AS period 
    UNION SELECT 2 
    UNION SELECT 3 
    UNION SELECT 4 
    UNION SELECT 5 
    UNION SELECT 6 
    UNION SELECT 7 
    UNION SELECT 8 
    UNION SELECT 9 
    UNION SELECT 10 
    UNION SELECT 11 
    UNION SELECT 12 
    ) 

SELECT period, 
    DATEADD(month,period-1,@StartDate) as startDate, 
    DATEADD(day,-1,DATEADD(month,period,@StartDate)) as endDate 
FROM periods 

마침표 목록을 만드는 방법에는 여러 가지가 있습니다. 예제는 this을 참조하십시오.

+0

Bobs가 쿼리 작업을 해줘서 고맙습니다. 어떻게 날짜 부분 만 가져올 수 있습니까? 실제로 타임 스탬프와 함께 오는 것입니다. 너무 많은 질문에 대한 미안 오라클 배경과 SQLSERVER에 새로운 있습니다. – user342944

+0

오오 BOB 나는 주위에 인터넷 검색을 해 봤어. Convert (varchar (10), DATEADD (month, number - 1, @StartDate), 105) thankssssssssssssssssssssssss – user342944

1

에서

덕분 참조 DATEADD()

select convert(datetime,'6/1/2010') 

select DATEADD(day,-1,DATEADD(month,1,convert(datetime,'6/1/2010'))) --6/30/2010 

select DATEADD(month,1,convert(datetime,'6/1/2010')) --7/1/2010 
당신은 가능성이 빠르고 정말 더러운 단지 하나의 큰 쿼리 또는 임시 테이블을 생성 할 저장 프로 시저에서이 실행됩니다

...

난 그냥 전체 당신을위한 것,하지만 건초을 주저

...

create procedure getFiscalYear 
    @startDate nvarchar(10) 
as begin 

declare @myDate datetime 
set @myDate = convert(datetime,@startDate) 

select 1 as Period, @myDate as startDate, DATEADD(day,-1,DATEADD(month,1,@myDate)) as endDate 
union 
select 2 as Period, DATEADD(month,1,@myDate) as startDate, DATEADD(day,-1,DATEADD(month,2,@myDate)) as endDate 
union 
select 3 as Period, DATEADD(month,2,@myDate) as startDate, DATEADD(day,-1,DATEADD(month,3,@myDate)) as endDate 
union 
select 4 as Period, DATEADD(month,3,@myDate) as startDate, DATEADD(day,-1,DATEADD(month,4,@myDate)) as endDate 
union 
select 5 as Period, DATEADD(month,4,@myDate) as startDate, DATEADD(day,-1,DATEADD(month,5,@myDate)) as endDate 
union 
select 6 as Period, DATEADD(month,5,@myDate) as startDate, DATEADD(day,-1,DATEADD(month,6,@myDate)) as endDate 
union 
select 7 as Period, DATEADD(month,6,@myDate) as startDate, DATEADD(day,-1,DATEADD(month,7,@myDate)) as endDate 
union 
select 8 as Period, DATEADD(month,7,@myDate) as startDate, DATEADD(day,-1,DATEADD(month,8,@myDate)) as endDate 
union 
select 9 as Period, DATEADD(month,8,@myDate) as startDate, DATEADD(day,-1,DATEADD(month,9,@myDate)) as endDate 
union 
select 10 as Period, DATEADD(month,9,@myDate) as startDate, DATEADD(day,-1,DATEADD(month,10,@myDate)) as endDate 
union 
select 11 as Period, DATEADD(month,10,@myDate) as startDate, DATEADD(day,-1,DATEADD(month,11,@myDate)) as endDate 
union 
select 12 as Period, DATEADD(month,11,@myDate) as startDate, DATEADD(day,-1,DATEADD(month,12,@myDate)) as endDate 

end 

이것은 추한 방법입니다 ...

+0

Fosco는 내 질문에 답변하기 위해 노력한 시간과 노력에 감사합니다 ... 더러운 방법이지만 효과가 있지만 나는 밥의 접근 방식을 취하고 있습니다. 어쨌든 고마워요. – user342944