77

现在我发现了很多类似的 SO 问题,包括我的一个旧问题,但我想做的是获取任何超过 30 天的记录,但我的表字段是 unix_timestamp。所有其他示例似乎都使用 DateTime 字段或其他内容。尝试了一些,但无法让它们工作。

这在下面肯定行不通。此外,我不想要介于日期之间的日期,我想要存储在数据库中的 unix 时间戳 30 天后的所有记录。我正在尝试修剪非活动用户。

简单的例子..不起作用。

SELECT * from profiles WHERE last_login < UNIX_TIMESTAMP(NOW(), INTERVAL 30 DAY)  

并尝试了这个

SELECT * from profiles WHERE UNIX_TIMESTAMP(last_login - INTERVAL 30 DAY) 

在复杂的日期查询中不太强。任何帮助表示赞赏。

4

3 回答 3

122

尝试类似:

SELECT * from profiles WHERE to_timestamp(last_login) < NOW() - INTERVAL '30 days' 

从手册中引用:

单参数 to_timestamp 函数也可用;它接受一个双精度参数并从 Unix 纪元(自 1970-01-01 00:00:00+00 以来的秒数)转换为带有时区的时间戳。(整数 Unix 纪元被隐式转换为双精度。)

于 2013-08-01T15:36:38.563 回答
46

除非我错过了什么,否则这应该很容易:

SELECT * FROM profiles WHERE last_login < NOW() - INTERVAL '30 days';
于 2013-08-01T15:25:56.950 回答
4

怎么样

SELECT * from profiles WHERE last_login < VALUEOFUNIXTIME30DAYSAGO

或者

SELECT * from profiles WHERE last_login < (extract(epoch from now())-2592000)

看看这个帖子:

https://dba.stackexchange.com/questions/2796/how-do-i-get-the-current-unix-timestamp-from-postgresql

和这个

http://www.epochconverter.com/

于 2013-08-01T15:41:34.037 回答