代码之家  ›  专栏  ›  技术社区  ›  flybywire

HQL中按年龄查询

  •  1
  • flybywire  · 技术社区  · 14 年前

    我有个班 User 调用了一个字段 birthDate 这是一个 java.sql.Date . 如何执行将检索所有 用户 介于 min max 岁?

    (我的真实场景比这稍微复杂一点,但这正是我现在所面临的困境)。

    更新

    它必须是一个hql表达式,所以我可以将年龄表达式放在计算属性中。

    2 回复  |  直到 14 年前
        1
  •  5
  •   Chandra Sekar    14 年前

    计算与最小和最大年龄相对应的出生日期。然后使用下面的hql。

    Select u from User u where u.birthDate between :minDate and :maxDate
    

    设置 minDate maxDate 到执行查询前计算的值。

        2
  •  0
  •   Brian Deterling    14 年前

    这取决于数据库。大多数都有处理日期算术的方法。MySQL有一个datediff函数,它将返回若干天,这样您就可以将其除以365,然后得到非常接近的结果。MySQL方言已将datediff作为注册函数。对于其他数据库,您可能需要使用不同的函数,并可能以自定义方言注册它们。但是,如果不考虑闰年,您可能会稍微有点走神,这在HQL表达式中是很棘手的。使用日期更容易,因为您可以保持月和日不变,更改年份,然后在HQL中使用<或>。