sql-从Now()到Postgresql中的Current_timestamp

在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

我该如何解决?

xRobot asked 2019-10-08T01:30:57Z
5个解决方案
112 votes

使用间隔而不是整数:

SELECT *
FROM table
WHERE auth_user.lastactivity > CURRENT_TIMESTAMP - INTERVAL '100 days'
Mark Byers answered 2019-10-08T01:31:08Z
29 votes

您也可以在Postgres中使用now()。 问题是您不能从timestamptimestamptz中添加/减去整数。您可以按照Mark Byers的建议进行操作并减去一个间隔,或者使用date类型允许您添加/减去整数。

SELECT now()::date + 100 AS date1, current_date - 100 AS date2
Scott Bailey answered 2019-10-08T01:31:33Z
4 votes

这是MySQL文档对NOW()的评价:

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

mysql> SELECT NOW();
        -> '2007-12-15 23:50:26'
mysql> SELECT NOW() + 0;
        -> 20071215235026.000000

现在,您当然可以将智能约会减少到更少...

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文档中找不到的假设。 无论哪种方式,您都可能希望查看pg中的dateinterval类型。

Evan Carroll answered 2019-10-08T01:32:27Z
4 votes

这是一个例子...

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

add_time是列名,我将其转换为char以进行匹配

Rohit Sonawane answered 2019-10-08T01:33:00Z
-2 votes
select * from table where column_date > now()- INTERVAL '6 hours';
Luis Carlos Herrera Santos answered 2019-10-08T01:33:19Z
translate from https://stackoverflow.com:/questions/2993468/from-now-to-current-timestamp-in-postgresql