2013-03-10 94 views
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 - Unknown column 'age' in 'where clause'

「時代」將輸出就好了,當我刪除where子句,它只是不會允許我使用它作爲一個條件,我不知道爲什麼。

回答

1

不能在WHERE子句中使用列別名。使用整個表達式或使用HAVING子句,儘管這隻適用於ORDER BY之後(因此對於大型數據集可能效率非常低)。

+0

我看到你在說什麼,我沒有意識到別名不能在WHERE子句中使用。謝謝! – 2013-03-10 19:22:27

-1

看起來像你對我有一個支架太多了,這裏爲 '%M /%d /%Y')))

+0

使用aliaces沒有他就不aliace年齡。包圍很好。 – 2013-03-10 19:19:57

+0

在我看來,你必須看起來不錯,他的括號 – 2013-03-10 19:23:16

+0

對。在第一個「CURDATE」後我錯過了右括號。但是,這可能是一個複製錯誤,因爲他說查詢在沒有'WHERE'的情況下運行良好。 – 2013-03-10 19:28:25

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子句

here an answer,如果你能在whre條款

+0

感謝您的幫助,上面的人打敗了你!我非常欣賞HAVING這個資源在超過一百萬行數據方面的表現。謝謝! – 2013-03-10 19:34:11