Интересно, может ли кто-нибудь помочь с некоторыми Postgres. У меня есть таблица, в которой есть столбец с именем mydate
типа даты postgres. Я хочу сделать что-то вроде:
SELECT * FROM MyTable WHERE mydate > [Today-1year]
Я никогда раньше не использовал Postgres и уверен, что мне просто нужно знать названия некоторых функций - я с удовольствием сам поищу ссылку. Может кто-то указать мне верное направление?
Благодарность!
sql
postgresql
Джозеф
источник
источник
Ответы:
select * from mytable where mydate > now() - interval '1 year';
Если вы заботитесь только о дате и нет времени, заменить
current_date
наnow()
источник
now()
это отметка времени, поэтому этот диапазон также будет включать только часть дня ровно год назад и часть дня сегодня. Если вы хотите фильтровать полные дни,now()::date
используйте предложенный Алекс Хованский.current_date
вместоnow()
Думаю, это сработает:
SELECT * FROM MyTable WHERE mydate > now()::date - 365;
источник
interval '1 year'
этого, високосные годы не учитываются. Возможно, вас это не беспокоит, но если это так, воспользуйтесь моим ответом.now()
возвращает метку времени, поэтому после вычитания'1 day'
вы получаете метку времени, которая, вероятно, отфильтрует часть дня, которую вы хотите запросить. Большинство людей хотят фильтровать один полный день, поэтому использованиеnow()::date
илиCURRENT_DATE
необходимо.Это должно дать вам текущую дату минус 1 год:
select now() - interval '1 year';
источник
Вы также можете проверить с помощью
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)