我有一个mysql数据库,我试图在结果中显示所有棕色的动物,最多2岁。我只能得到这个,它只是显示年龄值,而不是将其过滤到< = 2。
select name, DOB,
truncate(datediff(sysdate(),DOB)/365.25,0) as 'age'
from animal
where colour = 'Brown' and 'age' <=2;
感谢您的帮助。
答案 0 :(得分:1)
你不能在where子句中使用select子句的别名,重复执行
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;
答案 1 :(得分:0)
您应该根据DOB而不是计算字段进行过滤 -
SELECT name, DOB
FROM animal
WHERE colour = 'Brown'
AND DOB > (CURRENT_DATE - INTERVAL 3 YEAR);
编辑根据接受的答案,我觉得有必要解释我的答案。使用 -
where colour = 'Brown' and truncate(datediff(sysdate(),DOB)/365.25,0) <=2;
作为过滤年龄的方法效率不高,因为它需要计算年龄才能进行比较,使得DOB列上的任何索引都无效。然而,直接过滤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'
评估为false,因为该人现在是3(今天)。然而,如果这个人的生日是明天('2009-03-23'),他们仍然是2 -
'2009-03-23' > ('2012-03-22' - INTERVAL 3 YEAR)
反过来变成了 -
'2009-03-23' > '2009-03-22'
评估为真。
答案 2 :(得分:0)
我认为你应该使用HAVING age <= 2
。
http://dev.mysql.com/doc/refman/5.0/en/group-by-hidden-columns.html