【问题标题】:Query by age in hqlhql中按年龄查询
【发布时间】:2010-02-28 11:26:24
【问题描述】:

我有一个类User,其中一个字段名为birthDate,即java.sql.Date。 如何进行 hql 查询以检索所有 minmax 岁之间的 Users?

(我的真实情况比这稍微复杂一些,但这就是我现在卡住的地方)。

更新

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

【问题讨论】:

    标签: java sql hibernate datetime hql


    【解决方案1】:

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

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

    minDatemaxDate 设置为您在执行查询之前计算的值。

    【讨论】:

    • +1 好主意,但我想要一个 hql 表达式,然后我可以将其放入计算字段中。
    • 您是否有特定原因希望计算严格在查询内部进行? AFAIK HQL 不支持日期算术。但是您可以使用带有 Hibernate 的本机 SQL 在查询中执行它们。我不确定该场景是否值得通过使用本机 SQL 来权衡数据库独立性。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-19
      • 2011-02-01
      • 1970-01-01
      • 2011-02-23
      • 2015-05-22
      相关资源
      最近更新 更多