Как вычесть часы в querydsl? - PullRequest
       12

Как вычесть часы в querydsl?

0 голосов
/ 26 декабря 2018

Мне нужно построить следующий запрос в запросе dsl:

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

Но я не могу вычесть часы.Я использую Spring Framework и базу данных 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));

Этот код в основном просто сравнивает даты из БД, а невычитая часы.Мне нужен код для вычитания часов.

Когда я пытаюсь вычесть часы следующим образом:

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

Это дает: неожиданный токен: интервал ошибка

Ответы [ 2 ]

0 голосов
/ 28 декабря 2018
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);
0 голосов
/ 26 декабря 2018

Используйте приведенный ниже запрос

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

Поскольку вам нужно ввести дату приведения также для сравнения.

...