[英]How to calculate and apply condition on the age calculated based on date of birth in mysql?
我根据他的出生日期计算用户的年龄:
SELECT DATE_FORMAT(FROM_DAYS(DATEDIFF(now(),u.date_of_birth)), '%Y')+0 AS Age from users u ;
它给了我正确的年龄。 现在我该如何申请条件。 例如,当我尝试这样做时,它给了我错误:
SELECT DATE_FORMAT(FROM_DAYS(DATEDIFF(now(),u.date_of_birth)), '%Y')+0 AS Age from users u where age>20;
我知道这个语法不正确,但我如何在 mysql 和 JPA 的 Java 侧应用条件。
您不能在Where
子句中直接使用别名Age
,因为它不是在那个阶段计算的。 相反,您需要使用完整表达式(与您在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 相同。
此外,我认为在同一查询中计算 2 个位置的Age
并不是最好的方法。 假设您在表Users
中有一个唯一列,我们称之为Id
。 现在,您可以通过以下查询以更好的方法完成相同的任务:
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
希望这可以帮助!
要在 Java 中使用它sql查询,您需要一个 prepareStatement 或一个statement 。 对于准备好的语句,使用这些行:
String sql = "SELECT *
FROM users
WHERE date_of_birth > DATE_SUB(NOW(),INTERVAL ? YEAR);"
PreparedStatement preparedStatement = connection.prepareStatement(sql);
preparedStatement.setInt(1, "20");
preparedStatement.executeQuery(sql);
您的查询应该是这个:
SELECT date_of_birth
FROM users
WHERE date_of_birth > DATE_SUB(NOW(),INTERVAL 20 YEAR);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.