我有一個MySQL數據庫,並試圖在結果中顯示所有的棕色,最多2歲的動物。我所能得到的就是這個,它只是顯示年齡值,而不是過濾到< = 2。Where子句,列別名
select name, DOB,
truncate(datediff(sysdate(),DOB)/365.25,0) as 'age'
from animal
where colour = 'Brown' and 'age' <=2;
您的幫助表示讚賞。
我有一個MySQL數據庫,並試圖在結果中顯示所有的棕色,最多2歲的動物。我所能得到的就是這個,它只是顯示年齡值,而不是過濾到< = 2。Where子句,列別名
select name, DOB,
truncate(datediff(sysdate(),DOB)/365.25,0) as 'age'
from animal
where colour = 'Brown' and 'age' <=2;
您的幫助表示讚賞。
你不能用在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;
謝謝,這有助於很多。我需要隱藏年齡欄,我該怎麼做? – user1264074 2012-03-22 09:48:42
從select語句中刪除它 – 2012-03-22 09:53:22
謝謝! 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
您應根據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'
其計算結果爲真。
我認爲你應該使用HAVING age <= 2
。
http://dev.mysql.com/doc/refman/5.0/en/group-by-hidden-columns.html
非常感謝,但是有沒有辦法顯示年齡欄,只顯示<= 2的動物? – user1264074 2012-03-22 09:43:07
使用HAVING truncate(datediff(sysdate(),DOB)/365.25,0)<= 2 – 2012-03-22 10:13:08
此別名SELECT子句如果你可以設置在sqlfiddle.com一個例子,它會容易得多。 – 2012-03-22 09:36:37