我有一个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