Арифметика меток времени Derby SQL и escape-синтаксис JDBC

У меня есть два столбца в моей таблице: Создано (TIMESTAMP) и время жизни (BIGINT). Срок службы представлен в секундах. Я хотел бы добавить столбец времени жизни в столбец отметки времени и сравнить этот результат с другой датой.

Я сослался на руководство по дерби и обнаружил поддержку TIMESTAMPADD в «синтаксисе перехода JDBC для ключевого слова fn "раздел:

{fn functionCall} TIMESTAMPADD (интервал, целочисленное выражение, выражение отметки времени)

Хорошо, я попробовал:

SELECT i.messageId FROM ServerMessageEntity i
WHERE {fn TIMESTAMPADD(SQL_TSI_SECOND, i.lifetime, i.created)} > :now

*: теперь это параметр, который я передаю:

query.setParameter

К сожалению, я получаю следующее исключение:

Описание исключения: синтаксическая ошибка при синтаксическом анализе запроса [SELECT i.messageId FROM ServerMessageEntity i WHERE {fn TIMESTAMPADD (SQL_TSI_SECOND, i.lifetime, i.created)}>: now], неожиданный символ [{].

Похоже, что решением было бы добавить секунды к созданной метке времени и получить в результате другую метку времени. Любая помощь или синтаксис о том, как это сделать, будут оценены. Спасибо!

Дополнительная информация: Я использую Oracle TopLink 12c (12.1.2) для ORM и Derby 10.10.2.0


person aelstonjones    schedule 22.04.2014    source источник


Ответы (1)


Оказывается, моя проблема заключалась в использовании «@NamedQuery» для хранения запроса. Я экспериментировал, используя метод createNativeQuery, и смог получить желаемый результат.

String sql = "SELECT MESSAGEID FROM \"TABLE\".SERVERMESSAGES WHERE {fn TIMESTAMPADD(SQL_TSI_SECOND, LIFETIME, CREATED)} < ?"
Query query = entityManager.createNativeQuery(sql);
person aelstonjones    schedule 22.04.2014