Как определить последний день предыдущего месяца с помощью PostgreSQL?
Мне нужно запросить базу данных PostgreSQL, чтобы определить записи, которые попадают в сегодняшнюю дату и последний день предыдущего месяца. Другими словами, Я хотел бы получить все, что приходится на период с 31 декабря 2011 года по сегодняшний день. Этот запрос будет повторно использоваться каждый месяц, поэтому в следующем месяце запрос будет основан на текущей дате и 31 января 2012 года.
Я видел такой вариант, но я бы предпочел избежать использования функции (если это возможно).
6 ответов
для получения дата предыдущий/прошлый месяц:
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
попробуйте это:
SELECT ...
WHERE date_field between (date_trunc('MONTH', now()) - INTERVAL '1 day')::date
and now()::date
...
взять из 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', ) + INTERVAL '1 MONTH - 1 day')::date);
$$ LANGUAGE 'sql' IMMUTABLE STRICT;
select calc_days_in_month('1999-05-01')
возвращает 31
вы можете использовать функцию ниже:
CREATE OR REPLACE FUNCTION fn_GetLastDayOfMonth(DATE)
RETURNS DATE AS
$$
SELECT (date_trunc('MONTH', ) + INTERVAL '1 MONTH - 1 day')::DATE;
$$ LANGUAGE 'sql'
IMMUTABLE STRICT;
образец казней:
SELECT *FROM fn_GetLastDayOfMonth(NOW()::DATE);