H2数据库 - DATEDIFF无法正常工作

时间:2017-09-07 19:52:55

标签: sql database h2 datediff

我正在尝试使用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

任何帮助将不胜感激!!

3 个答案:

答案 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());