我正在尝试使用H2 DB来根据年龄来检索人员列表。
我正在使用此查询:
DATEDIFF('YEAR', BIRTHDATE, CURRENT_DATE)
然而,如果BIRTHDATE是Oct-24-1981,则H2返回36,它应该是35.这个人将在10月24日变成36,所以看起来H2只是在出生年份减去实际年份( 2017-1981 = 36),这不准确。
我知道我可以使用java解决这个问题,但需要进行大量的额外处理。用户需要从数据库中搜索给定年龄的所有人。我正在使用H2版本1.4.195
任何帮助将不胜感激!!
答案 0 :(得分:1)
您可以尝试使用:
select cast(DATEDIFF(dd,'09-20-1981','09-17-2017')/365.25 as int)
根据月份而不是年份,这将为您提供年龄 - 看他还不到36岁。
答案 1 :(得分:1)
基于你的想法,我提出了实际上有效的方法:
FLOOR(DATEDIFF(dd, BIRTHDATE, CURRENT_DATE)/365.25)
它不干净,但它有效。也许在H2的未来版本中,这不是必要的。
答案 2 :(得分:1)
您可以创建用户定义的功能:
CREATE ALIAS AGE AS '
long calculateAge(java.sql.Date birthDate, java.sql.Date currentDate) {
if ((birthDate != null) && (currentDate != null)) {
return java.time.temporal.ChronoUnit.YEARS.between(birthDate.toLocalDate(), currentDate.toLocalDate());
} else {
return 0;
}
}
';
然后只需使用它select age('2001-09-20', now());