2012-03-22 95 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

此別名SELECT子句如果你可以設置在sqlfiddle.com一個例子,它會容易得多。 – 2012-03-22 09:36:37

回答

1

你不能用在where子句中,做到這一點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 2012-03-22 09:48:42

+0

從select語句中刪除它 – 2012-03-22 09:53:22

+0

謝謝! select name,DOB from animal where color ='Brown'and truncate(datediff(sysdate(),DOB)/365.25,0)<2 ORDER BY DOB; – user1264074 2012-03-22 09:57:18

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」當前日期的日期將被評價爲 -

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

這反過來又成爲 -

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

,其評價因爲現在3人(今天)就變成虛假。然而,如果人的生日是明天( '2009-03-23'),他們仍然是2 -

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

這反過來又成爲 -

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

其計算結果爲真。