0

我在计算年龄时收到错误消息。

这是我的查询:

SELECT (YEAR(CURDATE()) - YEAR(STR_TO_DATE(birthdate, '%m/%d/%Y'))) age, name
FROM pers 
WHERE age >= 50 
ORDER BY age DESC 
LIMIT 100;

这是错误:

#1054 - 'where 子句'中的未知列'age'

当我删除 where 子句时,“age”会输出得很好,它只是不允许我将它用作条件,我不知道为什么。

4

3 回答 3

1

您不能在WHERE子句中使用列别名。使用整个表达式或使用HAVING子句,尽管这仅在之后应用ORDER BY(因此对于大型数据集可能非常低效)。

于 2013-03-10T19:17:41.227 回答
1

尝试这个

 SELECT (YEAR(CURDATE()) - YEAR(STR_TO_DATE(birthdate, '%m/%d/%Y'))) age, name
 FROM pers 
 WHERE (YEAR(CURDATE()) - YEAR(STR_TO_DATE(birthdate, '%m/%d/%Y')))  >= 50 
 ORDER BY age DESC 
 LIMIT 100;

您可以在 where 子句中使用别名年龄

这里是关于是否可以在 whre 子句中使用别名的答案

于 2013-03-10T19:21:54.970 回答
-1

在我看来,你的括号太多了,这里:'%m/%d/%Y')))

于 2013-03-10T19:15:58.997 回答