Postgresql中从现在()到当前_时间戳

Postgresql中从现在()到当前_时间戳,sql,datetime,postgresql,Sql,Datetime,Postgresql,在mysql中,我可以做到这一点: SELECT * FROM table WHERE auth_user.lastactivity > NOW() - 100 现在在postgresql中,我使用以下查询: SELECT * FROM table WHERE auth_user.lastactivity > CURRENT_TIMESTAMP - 100 但我得到了这个错误: operator does not exist: timestamp with time zone -

在mysql中,我可以做到这一点:

SELECT *
FROM table
WHERE auth_user.lastactivity > NOW() - 100
现在在postgresql中,我使用以下查询:

SELECT *
FROM table
WHERE auth_user.lastactivity > CURRENT_TIMESTAMP - 100
但我得到了这个错误:

operator does not exist: timestamp with time zone - integer

如何解析?

使用区间而不是整数:

SELECT *
FROM table
WHERE auth_user.lastactivity > CURRENT_TIMESTAMP - INTERVAL '100 days'

以下是MySQL文档关于
NOW()
的内容:

将当前日期和时间作为值返回到
YYYY-MM-DD HH:MM:SS
YYYYMMDDHHMMSS.uuuuuu
格式, 取决于功能是否正常 在字符串或数字上下文中使用。 该值以当前值表示 时区

现在,你当然可以把你的约会时间缩短一些

SELECT (
 date_part('year', NOW())::text
 || date_part('month', NOW())::text
 || date_part('day', NOW())::text
 || date_part('hour', NOW())::text
 || date_part('minute', NOW())::text
 || date_part('second', NOW())::text
)::float8 + foo;
但是,这将是一个非常糟糕的主意,你需要了解的是,时间和日期不是愚蠢的未配对数字,它们是他们的和

因此,MySQL时间本质上允许您将
NOW()
视为一种更愚蠢的类型,或者它覆盖
+
以做出我在MySQL文档中找不到的假设。因此,您可能希望查看第页中的
日期
间隔
类型。

您也可以在Postgres中使用
now()
。问题是不能从
时间戳
时间戳
中添加/减去整数。您可以按照Mark Byers的建议执行并减去间隔,也可以使用允许您添加/减去整数的
date
类型

SELECT now()::date + 100 AS date1, current_date - 100 AS date2
这里有一个例子

select * from tablename where to_char(added_time, 'YYYY-MM-DD')  = to_char( now(), 'YYYY-MM-DD' )

added_time是一个列名,我将它转换为char进行匹配

而不是向下投票,但是:INTERVAL使您在执行日期计算时可以清楚地看到您使用的是哪个单元。例如,时间
now()::date+100
表示的未来瞬间并不明显。是否有一种情况下,整数数学在区间数学中是必要的?这将非常缓慢,因为它计算每行的运算。所以它不能在普通
added\u time
列上使用索引。当然,您可以在
上创建函数索引(添加了_time,'YYYY-MM-DD')
,但在这种情况下,这似乎会增加开销。虽然这可能会回答问题,但也请简要说明您的代码的作用以及它解决初始问题的原因。
select * from table where column_date > now()- INTERVAL '6 hours';
select * from table where column_date > now()- INTERVAL '6 hours';