HP Vertica. Timestamp binding. Error 4286: Operator does not exist.

Недавно наткнулись на проблему с биндингом переменных с типом timestamp из Java.
Имеется вот такой запрос с одной bind-переменной:

select id from test where d_add > ? - interval '1 day'

На этапе парсинга запроса через prepareStatement выполнение программы падает со следующей ошибкой:

[Vertica][VJDBC](4286) ERROR: Operator does not exist: timestamp > interval(in seconds)

Решение проблемы оказалось достаточно простым, хоть и не совсем очевидным. Необходимо явно указать тип bind-переменной в запросе.

select id from test where d_add > ?::timestamp - interval '1 day'

Данная проблема возникает из-за того, что bind-переменная участвует в выражении вместе с interval. Если есть возможность убрать interval, это также решит проблему.

Leave a Reply

Your email address will not be published. Required fields are marked *