我有一个用于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));
答案 0 :(得分:0)
您始终必须使用interval
文字来指定单位,仅"120"
是不够的。
您可以使用类型强制转换消除歧义。更改
timestamp < (? + INTERVAL '1 HOUR' - INTERVAL '120')
到
timestamp < (?::timestamptz + INTERVAL '1 HOUR' - INTERVAL '120')]