PostgreSQL, дата проверки относительно «сегодня»

103

Интересно, может ли кто-нибудь помочь с некоторыми Postgres. У меня есть таблица, в которой есть столбец с именем mydateтипа даты postgres. Я хочу сделать что-то вроде:

SELECT * FROM MyTable WHERE mydate > [Today-1year]

Я никогда раньше не использовал Postgres и уверен, что мне просто нужно знать названия некоторых функций - я с удовольствием сам поищу ссылку. Может кто-то указать мне верное направление?

Благодарность!

Джозеф
источник
2
Для записи, документация здесь - к ней нужно немного привыкнуть, но она чрезвычайно обширна.
Иск Фонда Моники

Ответы:

176
select * from mytable where mydate > now() - interval '1 year';

Если вы заботитесь только о дате и нет времени, заменить current_dateнаnow()

Пол Томблин
источник
Это потрясающе! Спасибо
JustGage
2
Обратите внимание, что now()это отметка времени, поэтому этот диапазон также будет включать только часть дня ровно год назад и часть дня сегодня. Если вы хотите фильтровать полные дни, now()::dateиспользуйте предложенный Алекс Хованский.
tokenizer_fsj 04
1
@tokenizer_fsj of use current_dateвместоnow()
Paul Tomblin
66

Думаю, это сработает:

SELECT * FROM MyTable WHERE mydate > now()::date - 365;
Алекс Хованский
источник
10
Обратите внимание, что, в отличие от interval '1 year'этого, високосные годы не учитываются. Возможно, вас это не беспокоит, но если это так, воспользуйтесь моим ответом.
Пол Томблин,
Это должен быть принятый ответ. now()возвращает метку времени, поэтому после вычитания '1 day'вы получаете метку времени, которая, вероятно, отфильтрует часть дня, которую вы хотите запросить. Большинство людей хотят фильтровать один полный день, поэтому использование now()::dateили CURRENT_DATEнеобходимо.
tokenizer_fsj 04
9

Это должно дать вам текущую дату минус 1 год:

select now() - interval '1 year';
Кодерадж
источник
5

Вы также можете проверить с помощью age()функции

select * from mytable where age( mydate, now() ) > '1 year';

age() вернет интервал.

Например age( '2015-09-22', now() )вернется-1 years -7 days -10:56:18.274131

См. Документацию postgresql

Док
источник
Мне сказали, age()что это функция только для PostgreSQL (05.10.2018)
loxaxs
В качестве id вопрос @loxaxs
hd1