如何在querydsl中减去小时?

时间:2018-12-26 10:28:33

标签: postgresql hibernate querydsl

我需要在查询dsl中建立以下查询:

select * from my_table where (updated_at - interval '5 
hours')::date='2018-04-06' limit 10;

但是我不能减去几个小时。 我正在使用Spring框架和postgres数据库。

我已经编写了以下代码来创建布尔谓词:

StringTemplate dbDate = 
Expressions.stringTemplate("function('DATE_TRUNC', 'day', {0})", 
dateTimePath);
StringTemplate compareDate = 
Expressions.stringTemplate("function('TO_DATE', {0}, {1})", value, 
"YYYY-MM-dd");
new BooleanBuilder(dbDate.eq(compareDate));

上面的代码基本上只是比较db中的日期,而不是减去小时。我需要代码来减去小时。

当我尝试这样减去小时数时:

StringTemplate dbDate = Expressions.stringTemplate("function('DATE_TRUNC', 'day', {0} - interval '5 hours')", dateTimePath);

它给出了:意外令牌:间隔错误

2 个答案:

答案 0 :(得分:0)

query.where(Expressions.dateTimeOperation(
        Date.class, Ops.DateTimeOps.ADD_HOURS,
        myTable.updatedAt,
        Expressions.asNumber(-5)).eq(java.sql.Date.valueOf(LocalDate.of(2018, Month.APRIL, 06))))
        .limit(10L);

答案 1 :(得分:-1)

使用以下查询

select * from my_table where (updated_at - interval '5 
hours')::date='2018-04-06':: date limit 10;

由于您还需要键入强制转换日期才能进行比较。