2012-03-22 91 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' 

其计算结果为真。