当前位置: 首页 > 知识库问答 >
问题:

QueryDSL日期算术

简意
2023-03-14

我有一张这样的桌子:

CREATE  TABLE IF NOT EXISTS `sma`.`MIGRation` (
`MIGR_ID` BIGINT NOT NULL AUTO_INCREMENT ,
`MIGR_From` VARCHAR(1024) NOT NULL ,
`MIGR_To` VARCHAR(1024) NOT NULL ,
`MIGR_Validity_Days` INT NOT NULL ,
`MIGR_CreationDate` DATETIME NOT NULL ,
PRIMARY KEY (`MIGR_ID`) );

如何在QueryDSL中编写一个表达式来查找仍然有效的条目(creationDate validity_Days)?

SELECT * FROM MIGRation WHERE DATE_ADD(MIGR_CreationDate, INTERVAL MIGR_Validity_Days DAY) > now()

共有1个答案

麹高远
2023-03-14

对于算术查询,请查看com.querydsl.core.types.dsl。表达式类。在这种情况下,可以使用表达式::dateTimeOperation

import com.querydsl.core.types.Ops;
import com.querydsl.core.types.dsl.*;
import com.querydsl.sql.SQLQuery;
...
    @Transactional
    public List<MIGRationEntity> getMigration() {
        SQLQuery<MIGRationEntity> query = selectFrom(QMIGRation.MIGRation)
            .where(
                Expressions.dateTimeOperation(
                    Date.class, Ops.DateTimeOps.ADD_DAYS,
                    QMIGRation.MIGRation.mIGRCreationDate,
                    QMIGRation.MIGRation.mIGRValidityDays)
                .gt(DateTimeExpression.currentTimestamp()));
        String sql = query.getSQL().getSQL();
        System.out.print(sql);
        return query.fetch();
    }
...

创建的SQL:

select MIGRation.MIGR_CreationDate, MIGRation.MIGR_From, MIGRation.MIGR_ID, MIGRation.MIGR_To, MIGRation.MIGR_Validity_Days
from MIGRation MIGRation
where date_add(MIGRation.MIGR_CreationDate, interval MIGRation.MIGR_Validity_Days day) > current_timestamp
 类似资料:
  • 我想用QueryDSL表达以下(Oracle)查询: 即。我想做日期算术。不幸的是,(由返回)不包含任何用于加减法的方法,仅用于比较(如或)。 我找到了,但也没有任何帮助。 是我遗漏了什么,还是QueryDSL不支持日期算术?

  • 我正在尝试使用QueryDSL计算用户年龄和日期差。 但失败时出现此错误 谢谢

  • 我正在尝试使用QueryDSL计算平均日期差异。 我还尝试了其他方法,例如使用,但它没有返回正确的值。如果我们想要获得以秒为单位的日期差异,我们似乎需要找到一些方法来调用数据库特定的日期/时间差函数,而不仅仅是使用减号。 遗憾的是,在JPQL中计算日期差异似乎是不可能的,所以我想querydsl-jpa在这方面也有限制。因此,我们必须编写一个本机SQL查询,或者找到一些黑客来让QueryDSL生成

  • 我有一个实体,它有一个表示上次活动的日期对象。我想查询一下平均空闲时间。因此在SQL中,类似于: 我试着这样算了一下差别: 我如何以日期/时间差(以秒为单位)来表示这个平均值?

  • 问题内容: 是否可以使用JPA / Hibernate执行日期算术?例如,我有一个带有java.util.Date字段的实体,该实体指示何时创建该行。是否可以使用JPQL执行查询并在该字段上包括日期算术?例如,我可以执行COUNT(*)行,然后在该字段中按月份分组吗?我是否可以执行其他功能,例如仅返回查询中该字段的月份或年份? 问题答案: HQL确实有日期这样的表达式,,,,,和,但标准JPQL不

  • 主要内容:1. 如何创建计算字段,2. Tableau计算编辑器,3. 创建公式,4. 使用计算字段Tableau可以提供大量内置函数,例如:日期函数。日期是大多数数据分析中广泛使用的关键领域之一。 您可以操纵简单日期,例如添加或减去日期中的天数。此外,还可以创建包含日期的复杂表达式。 以下是创建计算字段并在其中使用日期函数的步骤。 1. 如何创建计算字段 连接到样本超市(sample superstore)数据源后。 然后转到“分析(Analysis)”菜单。 然后单击“创建计算字段(Crea