2014-03-03 2 views
-2

다음과 유사한 테이블이 있습니다. 시작일이 현재 달인 행만 선택하려고합니다. 여기까지 내가 지금까지 가지고있는 것이지만 작동하지 않습니다.이번 달 안에 날짜를 선택하십시오. SQL

SELECT * 
FROM TABLE1 
WHERE StartDate = MONTH(getdate()) 

어떻게하면 시작일이 현재 달인 값만 선택할 수 있습니까? (MONTH 또는 YEAR 같은) STARTDATE 컬럼에 기능을 피하기 위해

+0

날짜가 두 필드의 월을 확인하는 데 필요한 데이터 타입 – user3147424

+2

왜을 downvoted과 불신 대답을 받아? 성능이나 확장성에 신경 쓰지 않습니까? – gbn

+0

첫 번째 시도가 돌아 오지 않았으므로 성능 및 확장성에 대한 대답을 수락했습니다. – user3147424

답변

4

사용이 구축합니다. 이러한 함수는 인덱스 또는 통계가 사용되지 않도록합니다./

SELECT * 
FROM TABLE1 
WHERE 
    StartDate >= DATEADD(month, DATEDIFF(month, 0, GETDATE()), 0) 
AND StartDate < DATEADD(month, 1+DATEDIFF(month, 0, GETDATE()), 0) 

StartDate에서 기능을 설정하는 모든 대답은 예상대로 확장되지 않습니다. error number 2 here을 참조하십시오. 이제 필터가 sargable이 아니며 인덱스/통계를 사용할 수 없습니다. 모든 행에서 표 스캔을 찾습니다.

+1

필자는 개인적으로'DateAdd (mm, DateDiff (mm, 0, Current_Timestamp) + 1, 0)'을 선호하는데,'+ 1'을'DateAdd()'의 일부로 넣었습니다. 그 외의 가장 좋은 대답은 다음과 같습니다 :) – gvee

+0

@gvee : 명확성을 위해 좋은 점을 수정했습니다. – gbn

+0

@ gbn 향후 사용을 위해 이해할 수 있도록 설명해 주시겠습니까? – user3147424

-1

당신은

WHERE MONTH(startdate) = MONTH(getdate()) 
+0

일년은 어떨까요? – gvee

+0

나는 그 부분을 잊어 버린 것처럼 보이지만 질문은 이미 답변되었습니다. –

관련 문제