如何使用PostgreSQL确定上个月的最后一天?

Huu*_*uze 9 sql postgresql datetime

我需要查询PostgreSQL数据库以确定属于今天日期和上个月最后一天的记录.换句话说,我想检索2011年12月31日到今天之间的所有内容.此查询将每月重复使用,因此下个月,查询将基于当前日期和2012年1月31日.

我见过这个选项,但我更愿意避免使用函数(如果可能的话).

Erw*_*ter 16

这两种解决方案都包括上个月的最后一天,并且还包括所有"今天".

对于一date列:

SELECT *
FROM   tbl
WHERE  my_date BETWEEN date_trunc('month', now())::date - 1
               AND     now()::date
Run Code Online (Sandbox Code Playgroud)

您可以从a date(但不是从a timestamp)中减去普通整数值以减去天数.这是最简单,最快捷的方式.

对于一timestamp列:

SELECT *
FROM   tbl
WHERE  my_timestamp >= date_trunc('month', now()) - interval '1 day'
AND    my_timestamp <  date_trunc('day'  , now()) + interval '1 day'
Run Code Online (Sandbox Code Playgroud)

请注意,我使用<运算符作为第二个条件来获得精确的结果(〜"明天之前").

我没有date在第二个查询中强制转换.相反,我添加一个interval '1 day',以避免来回转换.

请查看手册中的日期/时间类型功能.

  • @ArupRakshit:`date_trunc('month',now()-间隔'1 month'):: date` (2认同)

Use*_*sbs 6

获取上个月/上个月的日期

SELECT (date_trunc('month', now())::date - 1) as last_month_date
Run Code Online (Sandbox Code Playgroud)

结果:2012-11-30

获取上个月/上个月的天数

SELECT DATE_PART('days', date_trunc('month', now())::date - 1) last_month_days
Run Code Online (Sandbox Code Playgroud)

结果:30