PostgreSQL+HQL报错:timestamp with time zone与integer无匹配运算符
问题:PostgreSQL时间戳加整数报错的解决办法
我正在学习HQL、PostgreSQL及JDBC查询,编写了一条查询最近一周内修改记录的语句:
String query = "SELECT t.id FROM table t" + " WHERE CURRENT_TIMESTAMP <= t.last_modified_timestamp + 7";
执行后出现如下异常:
nested exception is org.postgresql.util.PSQLException: ERROR: operator does not exist: timestamp with time zone + integer
错误原因
PostgreSQL不支持直接给**带时区的时间戳(timestamp with time zone)**加整数——数据库无法识别这个整数对应的时间单位(天、小时、分钟等),必须明确指定时间间隔的类型。
正确写法
1. 用INTERVAL关键字指定时间单位(推荐,语义清晰)
直接通过INTERVAL '7 days'明确表示7天的时间间隔,适配PostgreSQL原生语法:
String query = "SELECT t.id FROM table t" + " WHERE CURRENT_TIMESTAMP <= t.last_modified_timestamp + INTERVAL '7 days'";
如果是使用HQL,也可以用Hibernate标准的DATEADD函数:
String query = "SELECT t.id FROM table t" + " WHERE CURRENT_TIMESTAMP <= DATEADD('day', 7, t.last_modified_timestamp)";
2. 调整条件逻辑(等价写法,更直观)
查询最近一周的修改记录,本质是筛选“修改时间在7天前到当前时间范围内”的数据,也可以写成:
String query = "SELECT t.id FROM table t" + " WHERE t.last_modified_timestamp >= CURRENT_TIMESTAMP - INTERVAL '7 days'";
这个逻辑和原语句等价,但有时候更符合日常理解。
内容的提问来源于stack exchange,提问作者ah_ben
相关产品推荐
相关产品推荐

