如何在jdbc中为PostgreSQL设置'5天'(日期时间间隔)?

时间:2014-07-28 15:44:05

标签: java postgresql jdbc

考虑以下示例

select * from foo where time +'10 day' >current_timestamp

我想让这个查询参数化为Java,我不知道如何设置10 day ?! (字符串不起作用)

3 个答案:

答案 0 :(得分:11)

您可以传递一个String参数并将其强制转换,例如

select * from foo where (time + CAST(? AS interval)) > current_timestamp

或传递一个int参数乘以一个固定的间隔,如果你总是使用几天而不是更复杂的间隔,那就更好了。 E.g。

select * from foo where (time + ? * INTERVAL '1' DAY) > current_timestamp
带有setInt参数的

答案 1 :(得分:4)

select * from foo where time +'10 day'::interval >current_timestamp;

答案 2 :(得分:2)

请务必按以下方式编写查询:

SELECT * FROM foo WHERE "time" > current_timestamp - interval '1 day' * n

重点是将列与表达式进行比较,因此整个事情是sargable并且可以使用索引。

timestamp传递一个容易计算的current_timestamp - interval '10 days',或为n传递一个整数

我不会将time用作列名,即reserved word in the SQL standard

More about date / time arithmetic in the manual.