从现在()到 Postgresql 的 Current_time 戳

在 mysql 中,我可以这样做:

SELECT *
FROM table
WHERE auth_user.lastactivity > NOW() - 100

现在在 postgreql 中,我使用这个查询:

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

but I get this error:

operator does not exist: timestamp with time zone - integer

我该怎么解决?

216562 次浏览

使用间隔代替整数:

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

以下是 MySQL 文档对 NOW()的描述:

以值的形式返回当前日期和时间 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;

但是,这将是一个非常糟糕的主意,你需要了解的是,时间和日期不是愚蠢的未格式化的数字,它们是他们的 自己喜欢的类型与他们的 自己的一套函数operators

因此,MySQL 时间实际上允许您将 NOW()视为一个哑巴类型,或者它覆盖 +来做一个我在 MySQL 文档中找不到的假设。Eitherway,你可能想看看在 pg 中的 ABc2和 ABc3类型。

你也可以在 Postgres 使用 ABc0。问题是你不能从 timestamp或者 timestamptz中加/减整数。你可以像 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' )

Add _ time 是一个列名,我将其转换为 char 以进行匹配

select * from table where column_date > now()- INTERVAL '6 hours';