我需要在查询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);
它给出了:意外令牌:间隔错误
答案 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;
由于您还需要键入强制转换日期才能进行比较。