考虑以下示例
select * from foo where time +'10 day' >current_timestamp
我想让这个查询参数化为Java,我不知道如何设置10 day
?! (字符串不起作用)
答案 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。