我正在根据用户的Dob计算用户的年龄:
knn.predict(X_test)
这给了我正确的年龄。现在我该如何应用条件。例如,当我尝试这样做时,它给了我错误:
SELECT DATE_FORMAT(FROM_DAYS(DATEDIFF(now(),u.date_of_birth)), '%Y')+0 AS Age from users u ;
我知道此语法不正确,但是如何在mysql和Java端的JPA中对其应用条件。
答案 0 :(得分:0)
您不能直接在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
查询实际上是如何执行的。请同样通过this answer。
另外,我认为在同一查询的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
希望这会有所帮助!
答案 1 :(得分:0)
要在Java中使用它进行sql查询,您需要 preparedStatement 或声明。对于准备好的语句,请使用以下几行:
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);