与Postgres 9.2间隔30天。
我有这样一张桌子:
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
在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)
上的索引。
这对我有用......
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');