2013-02-28 3 views

답변

1

현재 서버 시간에서 1 개월을 뺀 값입니까? 보십시오 DATEADD function : 당신이 컬럼의 값이 지난 달에있는 레코드를 선택합니다

dateadd(month, -1, sysdatetime()) 

, 당신은 할 수 :

SELECT foo 
FROM bar 
WHERE baz BETWEEN dateadd(month, -1, sysdatetime()) AND sysdatetime() 
+1

아니요, 이전 달 (예 : 1 월 - 2 월을 의미하는 내일)의 의미였습니다. –

+1

또한,'MONTH'를 뜻한다면'MONTH'라고 입력하십시오. 속기는 문제를 일으킬 수 있습니다. 예를 들어'DATEPART (y, GETDATE()); '가 지금 2013을 반환한다고 생각하십니까? 많은 사람들이 그렇습니다. 게으르지 마라. –

+0

@AaronBertrand 당신을 곤경에 빠지게하는 것에 대한 좋은 지적이지만, 어떻게 OP의 마음을 읽었습니까? –

3
DECLARE @firstOfLastMonth DATE; 
SET @firstOfLastMonth = DATEADD(MONTH, DATEDIFF(MONTH, 0, SYSDATETIME())-1, 0); 

SELECT ... FROM ... 
WHERE dateColumn >= @firstOfLastMonth 
AND dateColumn < DATEADD(MONTH, 1, @firstOfLastMonth); 

여기에 당신이 사용하지 않는 이유 이것에 대한 BETWEEN :

http://sqlblog.com/blogs/aaron_bertrand/archive/2011/10/19/what-do-between-and-the-devil-have-in-common.aspx

http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/16/bad-habits-to-kick-mishandling-date-range-queries.aspx

+0

+1 그리고'dateColumn'의 인덱스도 사용됩니다! –

+0

이것이 효과가 있습니다 !!!!!! 정말 고맙습니다!!!!!! – Carol