我想了解从出生日期起两个年龄段之间用户的详细信息。我的条件是,
我的表是,
id username phone dob
-------------------------------------
1 Jithin 123456 31/12/1990
2 Binoy 235612 12/12/1991
3 Jibin 353453 12/12/1996
我已创建mysql查询,如下所示
SELECT username, DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(dob, '%Y') - (DATE_FORMAT(NOW(), '00-%m-%d') < DATE_FORMAT(dob, '00-%m-%d')) AS age FROM tbl_user WHERE age BETWEEN 20 AND 30
但上面的代码显示错误the column age not found
。如何解决这个问题。从age
查找dob
并进行比较的替代方法。
答案 0 :(得分:1)
您可以使用subquery
:
SELECT *
FROM (SELECT username,
DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(dob, '%Y') -
(DATE_FORMAT(NOW(), '00-%m-%d') < DATE_FORMAT(dob, '00-%m-%d')) AS age
FROM tbl_user) sub
WHERE sub.age BETWEEN 20 AND 30;
来自age
子句的SELECT
列在同一级别的WHERE
中不可见。您可以使用子查询包装它,也可以重复整个表达式。
答案 1 :(得分:1)
它无效,因为您无法立即使用别名。在其周围使用子查询或重复计算。有一种更短的计算方法:
SELECT TIMESTAMPDIFF(YEAR, dob, CURDATE()) AS age
from tbl_user
where TIMESTAMPDIFF(YEAR, dob, CURDATE()) between 20 and 30