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


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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.