2012-03-22 4 views
0

나는 mysql 데이터베이스를 가지고 있으며, 갈색이며 최대 2 살인 모든 동물을 결과에 표시하려고합니다. 내가 얻을 수있는 것은 이것 뿐이며, 연령 값을 표시하고 < = 2로 필터링하지 않습니다.Where 절, 컬럼 별칭

select name, DOB, 
truncate(datediff(sysdate(),DOB)/365.25,0) as 'age' 
from animal 
where colour = 'Brown' and 'age' <=2; 

귀하의 도움에 감사드립니다.

+1

을 할 경우에 선택 조항이 별칭을 사용할 수 없습니다, 그것은 훨씬 쉽게 될 것입니다. –

답변

1

당신이 절은이 repeate에게

select name, DOB, 
truncate(datediff(sysdate(),DOB)/365.25,0) as 'age' 
from animal 
where colour = 'Brown' and truncate(datediff(sysdate(),DOB)/365.25,0) <=2; 
+0

감사합니다.이 기능은 많은 도움이됩니다. 나이 열을 숨길 필요가 있습니다. 어떻게해야합니까? – user1264074

+0

선택 조항 –

+0

에서 삭제하십시오! 선택 이름 DOB 동물 곳에서 컬러 = '갈색'및 절단 (DATEDIFF (SYSDATE() DOB) /365.25,0) DOB BY <2 ORDER; – user1264074

0

당신은 DOB하지 계산 된 필드를 기준으로 필터링을 수행해야합니다 - 허용 대답에 비추어

SELECT name, DOB 
FROM animal 
WHERE colour = 'Brown' 
AND DOB > (CURRENT_DATE - INTERVAL 3 YEAR); 

편집을 내 대답을 설명 할 필요를 느낀다. 사용 - 그것은 나이가 쓸모 DOB 열에 모든 인덱스 렌더링 비교를 수행하기 위해 계산 될 필요로 나이를 필터링하는 방법으로서

where colour = 'Brown' and truncate(datediff(sysdate(),DOB)/365.25,0) <=2; 

은 효율적이지 않다. 반면, 다음, 적용 가능한 인덱스를 사용할 수 있습니다 직접 DOB 필드 필터링 -

DOB > (CURRENT_DATE - INTERVAL 3 YEAR); 

이 단순히 말한다 "를 생년월일 오늘 마이너스 삼년보다 더 크다."

'2009-03-22' > ('2012-03-22' - INTERVAL 3 YEAR) 

차례가되는 - - 그래서 '2009-09-08'의 탄생과 '2012-03-22'의 현재 날짜의 날짜로 평가됩니다

'2009-03-22' > '2009-03-22' 

평가하는 그 사람은 이제 3 (오늘)이므로 거짓으로.

차례가된다
'2009-03-23' > ('2012-03-22' - INTERVAL 3 YEAR) 

- - true로 평가

'2009-03-23' > '2009-03-22' 

을 사람의 생일이 내일이면 반면, ('2009-03-23')은 여전히 ​​2입니다.

0

나는 HAVING age <= 2을 사용해야한다고 생각합니다. 당신이 sqlfiddle.com에 대한 예제를 설정할 수 있다면

http://dev.mysql.com/doc/refman/5.0/en/group-by-hidden-columns.html

+0

대단히 감사하지만 나이 열을 보여주지 않는 방법이 있습니까? <= 2 인 동물을 보여 주시겠습니까? – user1264074

+0

HAVING truncate (datediff (sysdate(), DOB)/365.25,0) <= 2 –