我需要查询PostgreSQL数据库以确定属于今天日期和上个月最后一天的记录。换句话说,我想检索2011年12月31日到今天之间的所有内容。此查询将每月重复使用,因此下个月,查询将基于当前日期和2012年1月31日。
我见过this option,但我宁愿避免使用函数(如果可能的话)。
答案 0 :(得分:14)
两个解决方案包括上个月的最后一天,包括所有“今天”。
date
列:SELECT *
FROM tbl
WHERE my_date BETWEEN date_trunc('month', now())::date - 1
AND now()::date
您可以从date
(但不是从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'
请注意,我使用<
运算符来获取第二个条件以获得精确结果(〜“明天之前”)。
我没有在第二个查询中转换为date
。相反,我添加interval '1 day'
,以避免来回转换。
请查看手册中的date / time types和functions。
答案 1 :(得分:3)
获取上个月/上个月的日期:
SELECT (date_trunc('month', now())::date - 1) as last_month_date
结果:2012-11-30
获取上个月/上个月的天数:
SELECT DATE_PART('days', date_trunc('month', now())::date - 1) last_month_days
结果:30
答案 2 :(得分:2)
试试这个:
SELECT ...
WHERE date_field between (date_trunc('MONTH', now()) - INTERVAL '1 day')::date
and now()::date
...
答案 3 :(得分:0)
尝试
select current_date - cast((date_part('day', current_date) + 1) as int)
答案 4 :(得分:0)
从http://wiki.postgresql.org/wiki/Date_LastDay获取,并修改为仅返回一个月内的日期
CREATE OR REPLACE FUNCTION calc_days_in_month(date)
RETURNS double precision AS
$$
SELECT EXTRACT(DAY FROM (date_trunc('MONTH', $1) + INTERVAL '1 MONTH - 1 day')::date);
$$ LANGUAGE 'sql' IMMUTABLE STRICT;
select calc_days_in_month('1999-05-01')
返回31
答案 5 :(得分:0)
<强> Reference is taken from this blog: 强>
您可以使用以下功能:
CREATE OR REPLACE FUNCTION fn_GetLastDayOfMonth(DATE)
RETURNS DATE AS
$$
SELECT (date_trunc('MONTH', $1) + INTERVAL '1 MONTH - 1 day')::DATE;
$$ LANGUAGE 'sql'
IMMUTABLE STRICT;
示例执行:
SELECT *FROM fn_GetLastDayOfMonth(NOW()::DATE);