我需要查询一个PostgreSQL数据库,以确定今天的日期和上个月的最后一天之间的记录。换句话说,我想检索从2011年12月31日到今天的所有数据。此查询将在每个月重复使用,因此下个月将基于当前日期和2012年1月31日进行查询。
我见过this option,但我更希望避免使用函数(如果可能的话)。
发布于 2012-01-21 01:17:41
这两个解决方案都包括上个月的最后一天,也包括“今天”。
对于date
列:
SELECT *
FROM tbl
WHERE my_date BETWEEN date_trunc('month', now())::date - 1
AND now()::date
您可以从date
(但不是从timestamp
)中减去普通整数值来减去days。这是最简单、最快的方法。
对于timestamp
列:
SELECT *
FROM tbl
WHERE my_timestamp >= date_trunc('month', now()) - interval '1 day'
AND my_timestamp < date_trunc('day' , now()) + interval '1 day'
请注意,我对第二个条件使用了<
运算符,以获得精确的结果(~“明天之前”)。
在第二个查询中,我没有强制转换为date
。相反,我添加了一个interval '1 day'
,以避免来回转换。
请看一下手册中的date / time types和functions。
发布于 2012-12-05 20:51:15
获取上个月/上个月的日期:
SELECT (date_trunc('month', now())::date - 1) as last_month_date
结果: 2012-11-30
获取上个月/上个月的number of days:
SELECT DATE_PART('days', date_trunc('month', now())::date - 1) last_month_days
结果: 30
发布于 2012-01-21 00:40:12
试试这个:
SELECT ...
WHERE date_field between (date_trunc('MONTH', now()) - INTERVAL '1 day')::date
and now()::date
...
https://stackoverflow.com/questions/8944721
复制相似问题