我有一个表,其中有两个时间戳列代表effective
和expiration
个日期,我需要获取那些当前时间戳落在这两个日期列中的行。
这可以通过将条件放在SQL查询中来完成,如下所示
effectiveDate <= current_timestamp and current_timestamp < expirationDate
。
问题是如果expirationDate
不为空,则满足上述条件。如果它为null,则只有
将检查effectiveDate <= current_timestamp
。
我想这是一种动态SQL。我在项目中使用Hibernate。我可以使用critera API或HQL或SQL。
请告诉我如何做到这一点。
答案 0 :(得分:1)
您的第一个版本不是SQL。但你想要的是:
where effectiveDate <= current_timestamp and
(expirationDate is NULL or current_timestamp < expirationDate)
答案 1 :(得分:0)
您想要的SQL没有任何动态。试试这个:
Criteria c = sf.getCurrentSession().createCriteria(MyObject.class)
.add(Restrictions.lt("effectiveDate",dateArgument))
.add(Restrictions.or(
Restrictions.isNull("expirationDate"),
Restrictions.gt("expirationDate",dateArgument)));
调用c.list()
将返回MyObject
每个effectiveDate
小于给定日期的expirationDate
AND 还有一个null
即{ {1}}或大于给定日期。
只要你不介意使用Hibernate Criteria Queries,就应该给你你想要的东西。
注意:根据您的具体要求,随意与.lt(...)
和.gt(...)
交换.le(...)
和.ge(...)
。