间隔30天,使用Postgres 9.2。
我有一张这样的桌子:
ID NAME CREATED_AT
1 valid 2019-03-07 12:00:00
2 valid 2019-02-05 12:00:00
3 valid 2019-02-04 12:00:00
我想获取所有与30天间隔匹配的行 。
如果今天是2019-03-07,我应该只得到:
2 valid 2019-02-05 12:00:00
如果今天是2019-04-06,我应该得到:
1 valid 2019-03-07 12:00:00
2 valid 2019-02-05 12:00:00
以此类推...
如果今天是2019-05-06:
1 valid 2019-03-07 12:00:00
2 valid 2019-02-05 12:00:00
答案 0 :(得分:1)
在Postgres中,您可以从integer
中减去date
(以天数为单位):
SELECT *
FROM tbl
WHERE created_at >= current_date - 30
AND created_at < current_date; -- to exclude "today" (and the future)
date
在表达式中隐式转换为timestamp
。
不包括“今天”,即30天。如果表很大,请考虑在(created_at)
上建立索引。
答案 1 :(得分:0)
这对我有用...
select (NOW() - interval '30 day')
NOW()函数将返回当前日期。
INTERVAL 数据类型使您可以存储和操纵以年,月,日,小时,分钟,秒等为单位的时间段。间隔需要16字节的存储空间。
@ interval [ fields ] [ (p) ]
时间间隔具有可选的精度值p。 p的范围是0到6,以秒为单位的数字分数。 @符号是可选的。
SELECT * FROM TABLE
WHERE CREATED_AT >= (NOW() - interval '30 day')
AND CREATED_AT <= (NOW() - interval '1 day');