PostgreSQL, перевірка дати щодо “сьогодні”


103

Мені було цікаво, чи хтось може допомогти з якимось Postgres. У мене є таблиця, яка має стовпець із назвою, mydateякий є типом дати postgres. Я хочу зробити щось на зразок:

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

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

Дякую!


2
Для запису, документація є тут - потрібно трохи звикнути, але вона надзвичайно вичерпна.
Позовні фонди Моніки

Відповіді:


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

Якщо ви дбаєте тільки про дату і немає часу, замінити current_dateнаnow()


Це прекрасно! Дякую
JustGage

1
Зверніть увагу, що now()це позначка часу, тому цей діапазон також включатиме лише частину дня рівно рік тому та частину дня сьогодні. Якщо ви хочете фільтрувати на цілі дні, кастуйте так, now()::dateяк запропонував Алекс Хованський
tokenizer_fsj

1
@tokenizer_fsj використання current_dateзамістьnow()
Пол

66

Я думаю, що це зробить це:

SELECT * FROM MyTable WHERE mydate > now()::date - 365;

10
Зауважте, що на відміну від interval '1 year'цього, це не буде поважати високосних років. Це може не турбувати вас, але якщо це так, використовуйте мою відповідь.
Пол Томблін,

Це має бути прийнятою відповіддю. now()повертає часову позначку, тож після віднімання '1 day', ви закінчуєте часову позначку, яка, ймовірно, відфільтрує частину дня, що вас цікавить запит. Більшість людей хочуть фільтрувати протягом одного цілого дня, і тому використовувати now()::dateабо CURRENT_DATEпотрібно.
tokenizer_fsj

9

Це має дати вам поточну дату мінус 1 рік:

select now() - interval '1 year';

5

Ви також можете перевірити за допомогою age()функції

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

age() wil поверне інтервал.

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

Дивіться документацію postgresql


Мені кажуть age(), що це лише функція PostgreSQL (2018-10-05)
loxaxs

Як ідентифікатор питання @loxaxs
hd1
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.