2012-07-31 3 views
3

6 개월 전부터 오늘까지 내 테이블에서 항목을 찾으려고합니다.MySQL에서 6 개월 미만의 행을 간결하게 찾을 수 있습니다.

WHERE (DATE(l.date_fin) BETWEEN DATE(DATE_ADD(NOW(), INTERVAL -6 MONTH)) AND CURDATE()) 

그러나, 그것은 바로 나에게 보이지 않는 : 저는 여기에 현재 실행 해요 쿼리의이 쿼리와 같은 결과를 얻을 수있는 방법은보다 간결 및/또는 속도가처럼 느낀다. 그런 식으로 있나요?

+2

date_fin이 오늘보다 늦은 항목이있을 수 있습니까? 그렇지 않다면 다음을 시도해 볼 수 있습니다 : DATE_SUB (CURDATE(), INTERVAL 6 MONTH) <= l.date_fin; –

답변

7

이 당신이 원하는 것을 얻을 충분해야한다

WHERE DATE(l.date_fin) BETWEEN DATE_SUB(CURRENT_DATE, INTERVAL 6 MONTH) AND CURRENT_DATE; 

당신이 다음에 열 date_fin 인덱스가있는 경우 사용할 수있는 최상의 성능을 얻으십시오.

WHERE l.date_fin BETWEEN CAST(DATE_SUB(CURRENT_DATE, INTERVAL 6 MONTH) AS DATETIME) AND 
    DATE_SUB(CAST(DATE_SUB(CURRENT_DATE, INTERVAL 1 DAY) AS DATETIME), INTERVAL 1 MINUTE); 
+0

@Bart 죄송합니다, @ Sean M은 내 실수를 시정 해 주셔서 고맙습니다. –

0
SELECT l.date_fin FROM table WHERE l.date_fin between current_date and current_date+interval -6 month 
1
이 작업을 수행하는

쉬운 방법은 다음과 같습니다 :

SELECT l.date_fin FROM table WHERE TIMESTAMPDIFF(MONTH,l.date_fin,NOW()) < 6 
관련 문제