小编Vic*_*Vic的帖子

使用Oracle 11上的queryDsl获取两天之间天数差异的问题

我正在使用queryDsl进行查询.

我用它来创建一个BooleanExpresion

public BooleanBuilder getPredicate(BooleanBuilder pBuilderBusquePerso){

int dias = 30;

QEntity1 qEntity = QEntity1.entity;

pBuilderBusquePerso = pBuilderBusquePerso.and(qEntity.date1 != null
? (SQLExpressions.datediff(DatePart.day, qEntity.date2, qEntity.date1).lt(dias) ) :null );

return pBuilderBusquePerso;
}
Run Code Online (Sandbox Code Playgroud)

在另一个过程中,我调用并执行以下操作:

BooleanBuilder pBuilderBusquePerso = new BooleanBuilder();

Predicate filter =getPredicate(pBuilderBusquePerso);

Page<Entity> iLista = myRepository.findAll(getMyPredicate(usr, filter, tipoListado, null, estados), paginacion);
Run Code Online (Sandbox Code Playgroud)

所以sql查询结果是:

select table1 ta1
......
exists (
select 1 
from
table2 ta2
where
   ta1.inv_id=ta2.inv_id 
 and diff_days(ta1.inv_exp_date, ta2.exp_date)<?
)
Run Code Online (Sandbox Code Playgroud)

给出以下错误:

引起:java.sql.SQLException:ORA-00904:"DIFF_DAYS":标识符无效

所以ddbb oracle的querysql转换是错误的.有没有办法从queryDsl转换为oracle函数?我需要什么?

我也试过DATETRUNC

pBuilderBusquePerso = pBuilderBusquePerso.and(qEntity.date1 != null
? (SQLExpressions.datetrunc(DatePart.day, qEntity.date1).castToNum(Integer.class).subtract(SQLExpressions.datetrunc(DatePart.day, qEntity.date2).castToNum(Integer.class))).lt(dias) :null …
Run Code Online (Sandbox Code Playgroud)

java sql oracle querydsl

5
推荐指数
1
解决办法
3479
查看次数

标签 统计

java ×1

oracle ×1

querydsl ×1

sql ×1