我想在Postgres中创建一个到期条件。我有一个可变的last_sync::timestamp
和一个限制86400 * 30
秒。我试过这种方式:
NOW() - last_sync > 86400 * 30
但它给出了一个错误:没有运算符的间隔>整数。
即使last_sunc
为-infinity
,我也希望它能够正常运作。
如何正确进行比较?
答案 0 :(得分:3)
使用interval ==> Date/Time Functions and Operators
create table asd(
name varchar(20),
last_sync timestamp
)
;
insert into asd values( 'one', now() - interval '500' hour );
insert into asd values( 'two', now() - interval '1500' hour );
SELECT *
from asd
where NOW() - last_sync > ( 86400 * 30 ) * INTERVAL '1' second
name |last_sync |
-----|--------------------|
two |2016-10-26 00:52:16 |
如果last_sync是-infinity,如何使其工作? - Fomalhaut 5分钟前
insert into asd values( 'one', now() - interval '500' hour );
insert into asd values( 'two', now() - interval '1500' hour );
insert into asd values( 'minus infinity', timestamp '-infinity' );
insert into asd values( 'plus infinity', timestamp 'infinity' );
SELECT *
from asd
where last_sync > NOW() - ( 86400 * 30 ) * INTERVAL '1' second
name |last_sync |
--------------|-------------------------|
one |2016-12-06 15:52:12 |
plus infinity |292278994-08-17 00:00:00 |
答案 1 :(得分:0)
如果您将其视为数学家
app.post('/submit', function(req, res) {
var q = req.query;
var params = [q.email, q.company, q.subject, q.text];
db.serialize()
.then(() => db.run("INSERT INTO users VALUES (?, ?, ?, ?)", params))
.then(() => res.status(200).end())
.catch((err) => {
console.error(err);
res.status(400).end();
});
});
});
等于
<Assertion>...</Assertion>
对于第一行,您有NOW() - last_sync > 86400 * 30
第二行,您有NOW() > 86400 * 30 + last_sync
。没有最后一个类型的问题。
我不知道PostgreSQL应该编写解决方案但是你有一个良好的开端。使用正确的函数将值添加到时间戳。
答案 2 :(得分:0)
您可以将86400 * 30
转换为interval
秒:
interval '2592000 second'
然后你可以比较:
select (now() - '2016-12-02') > interval '2592000 second';
此选择返回:
False
您可以将integer
转换为interval
:
(86400 * 30) * interval '1 second'