比较输入时间戳和时间间隔,获取操作员错误

时间:2018-12-05 00:16:51

标签: sql postgresql date-arithmetic

我有一个用于trigger SQL查询的Java代码,我需要与输入时间和输入时间加上一个小时进行比较,不确定这是什么错误,因为它在我的SQL客户端上正常工作。

我收到此错误:

  

线程“主”中的异常   org.springframework.jdbc.BadSqlGrammarException:   PreparedStatementCallback;错误的SQL语法[从以下位置选择count(*)   事务在哪里时间戳>? AND时间戳<(?+ INTERVAL'1 HOUR'   -间隔'120')];嵌套的异常是org.postgresql.util.PSQLException:错误:运算符不存在:   时区<间隔

的时间戳

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 :(得分:0)

您始终必须使用interval文字来指定单位,仅"120"是不够的。

您可以使用类型强制转换消除歧义。更改

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

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