сравнить временную метку ввода с интервалом, получить ошибку оператора - PullRequest
0 голосов
/ 05 декабря 2018

У меня есть Java-код для trigger SQL-запроса, мне нужно сравнить с временем ввода и временем ввода плюс один час, не уверен, что здесь не так, потому что он работает на моем клиенте SQL.

Я получил эту ошибку:

Исключение в потоке "main" org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback;неверная грамматика SQL [выберите количество (*) из транзакции, где отметка времени>?И отметка времени <(? + ИНТЕРВАЛ '1 ЧАС' - ИНТЕРВАЛ '120')];вложенное исключение: org.postgresql.util.PSQLException: ОШИБКА: оператор не существует: временная метка с часовым поясом <интервал </p>

код Java:

static final String SQL_QUERY_TO_FETCH_TRANSACTION_COUNT = "select count(*) from %s where timestamp > :timestamp AND " +
        "timestamp < (:timestamp + INTERVAL '1 HOUR' - INTERVAL '%s')";


public Transactions getTransactionsAfterTime(Timestamp lastReadTimestamp, int maxRecords) throws SQLException {
        DatabaseRecordMapper transactionRecordMapper = DatabaseRecordMapper.builder().tableName(TRANSACTION).build();
        SqlParameterSource namedParameters = new MapSqlParameterSource("timestamp", lastReadTimestamp);
        final String sqlToFetchTransactionCount =
                String.format(SQL_QUERY_TO_FETCH_TRANSACTION_COUNT, TRANSACTION,
                        Integer.toString(TRANSACTION_TIMEOUT_IN_SECONDS));

1 Ответ

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

Вы всегда должны указывать юнит с литералом interval, одного "120" недостаточно.

Вы можете устранить неоднозначность с помощью приведения типа.Измените

timestamp < (? + INTERVAL '1 HOUR' - INTERVAL '120')

на

timestamp < (?::timestamptz + INTERVAL '1 HOUR' - INTERVAL '120')]
...