2014-03-04 3 views
0

내 요구 사항은 @STARTDATE 변수를 01 [시작일] - 월 [현재 월] - 연도 [현재 연도]로 설정하고 해당 월을 기준으로합니다 달을 바탕으로 2월 28일 일 @ENDDATE 변경 월 31 일저장 프로 시저의 변수에 시작 날짜와 종료 날짜를 설정해야합니다.

 DECLARE @STARTDATE DATETIME 
DECLARE @ENDDATE DATETIME 

우리는 종료 날짜 여기

 DECLARE @MONTH int 
    SET @MONTH=(select MONTH(getdate())) 

내가 STARTDATE에 날짜를 표시 할 수 없습니다 AM를 나눕니다. 당신이 @StartDate을 찾은 후

SET @STARTDATE = '[email protected]+-+YEAR+' 
IF (
     @MONTH = 4 
     OR @MONTH = 6 
     ) 
    SET @ENDDATE = '[email protected]+-+YEAR+' 
IF (@MONTH/4 = 0) 
    SET @ENDDATE = '[email protected]+-+YEAR+' 
ELSE 
    SET @ENDDATE = '[email protected]+-+YEAR+' 
+1

단을 1 개월 추가 – Eralper

답변

3
select @STARTDATE = dateadd(m, datediff(m, 0, current_timestamp), 0) startdate, 
     @ENDDATE = dateadd(m, datediff(m, 0, current_timestamp) + 1, -1) enddate 
+2

우리가'@STARTDATE'와'@ENDDATE' 사이에서 데이터를 검색하려고 할 때. 그러면 거래 날짜가'@ENDDATE '와 같은 레코드는 검색되지 않습니다. '@ ENDDATE '시간은 오전 12:00입니다. – Shell

+2

@ Nimesh - 시간 구성 요소가있는 datetime 데이터를 검색하려면 검색에 * 배타적 인 끝점을 사용하는 것이 좋습니다 (즉, 여기서는'@ENDDATE'를 다음 중 첫 번째로 설정합니다. 달), 비교할 때'<='보다는'<'를 사용하십시오. –

+1

@ Nimesh Damien이 옳습니다. 그러나 레코드를 필터링하려고 할 때 트랜잭션 날짜에 시간이 있으면 마지막 날짜의 레코드는 검색되지 않습니다. –

관련 문제