java 将数据库中的日期时间加上偏移量与queryDSL中的now()进行比较

z9smfwbn  于 2023-02-02  发布在  Java
关注(0)|答案(1)|浏览(127)

使用queryDSL和mySQL:
我在time_check表中有一个字段from,我想将location表中的timetrackAutoStop作为小时添加到该字段中,然后将其与当前时间进行比较。
我们设法让queryDSL理解以下代码:

if (data.getAutostopTimeExceeded() != null) {   
    QLocationEntity location = QLocationEntity.locationEntity;   
    query.join(TIME_CHECK.location, location);   
    Expression<LocalDateTime> currentTimeExpr = Expressions.asDateTime(LocalDateTime.now());   
        TIME_CHECK.from, Expressions.asNumber(location.timetrackAutoStop));   
    predicates.add(
        Expressions.predicate(Ops.GT, 
            currentTimeExpr, 
            Expressions.dateTimeOperation(LocalDateTime.class, 
                Ops.DateTimeOps.ADD_HOURS, 
                TIME_CHECK.from, 
                Expressions.asNumber(location.timetrackAutoStop)
            )
        )
    );
}

然而,它随后生成SQL,导致mySQL数据库报告ADD_HOURS函数不存在。
有没有办法得到我想要的东西?即所有比now()旧的time_check_records减去timeTrackAutoStop
更新:
我们尝试了以下操作,但收到一条错误消息:应为CLOSE,但找到locationEntity

QLocationEntity qLocationEntity = QLocationEntity.locationEntity;
query.join(TIME_CHECK.location, qLocationEntity);
Expression<LocalDateTime> currentTimeExpr = Expressions.asDateTime(LocalDateTime.now());
Expression<LocalDateTime> subExpr = Expressions.template(LocalDateTime.class,      
    "DATE_ADD({0}, INTERVAL {1} HOUR)", 
    TIME_CHECK.from, 
    qLocationEntity.timetrackAutoStop
    );
predicates.add(Expressions.predicate(Ops.GT, currentTimeExpr, subExpr));
a6b3iqyw

a6b3iqyw1#

MySQL数据库没有向日期添加小时数的内置函数。但是,可以使用DATE_ADD()函数向日期添加小时间隔。此函数的语法如下:

DATE_ADD(date, INTERVAL expr unit)

其中date是要添加间隔的日期,expr是要添加的小时数,unit是时间单位(在本例中为“hour”)。

相关问题