Вы не можете использовать псевдоним Age
там непосредственно в предложении Where
, поскольку на этом этапе он не вычисляется. Вместо этого вам нужно использовать полное выражение (то же самое, которое вы используете для вычисления возраста в предложении Select
).
Должен работать следующий запрос:
SELECT DATE_FORMAT(FROM_DAYS(DATEDIFF(now(),u.date_of_birth)), '%Y')+0 AS Age
from users u
where DATE_FORMAT(FROM_DAYS(DATEDIFF(now(),u.date_of_birth)), '%Y')+0 >20;
Я думаю, чтобы понять это даже лучше, вы должны знать, как на самом деле выполняется запрос SQL
. Пожалуйста, от go до этот ответ для того же.
Кроме того, я думаю, что вычисление Age
в двух местах одного и того же запроса - не лучший способ сделать это. Предположим, у вас есть уникальный столбец в таблице Users
, и назовем его Id
. Теперь вы можете выполнить sh то же самое с лучшим подходом со следующим запросом:
Select u2.Id, u2.age
from users u1
inner join
(select id,
DATE_FORMAT(FROM_DAYS(DATEDIFF(now(),u.date_of_birth)), '%Y')+0 AS Age
from users
) u2
On u1.id = u2.id
where u2.age > 20
Надеюсь, это поможет!