繁体   English   中英

如何在 mysql 中根据出生日期计算的年龄计算和应用条件?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM