30-дневный перерыв с Postgres 9.2.
У меня есть такая таблица:
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. р имеет диапазон от 0 до 6 и доли цифр в секундах. Знак @не является обязательным.
SELECT * FROM TABLE
WHERE CREATED_AT >= (NOW() - interval '30 day')
AND CREATED_AT <= (NOW() - interval '1 day');