PostgreSQL, sprawdzanie daty względem „dzisiaj”

103

Zastanawiałem się, czy ktoś mógłby pomóc z jakimiś Postgresami. Mam tabelę, która ma kolumnę o nazwie, mydatektóra jest typem daty postgres. Chcę zrobić coś takiego:

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

Nigdy wcześniej nie korzystałem z Postgres i jestem pewien, że muszę tylko znać nazwy niektórych funkcji - z przyjemnością sam sprawdzę odniesienie. Czy ktoś może wskazać mi właściwy kierunek?

Dzięki!

Józefa
źródło
2
Dla porządku, dokumentacja jest tutaj - trzeba się trochę przyzwyczaić, ale jest niezwykle obszerna.
Załóż pozew Moniki

Odpowiedzi:

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

Jeśli tylko dbać o terminie i nie czas, substytutem current_datedlanow()

Paul Tomblin
źródło
To jest doskonałe! Dzięki
JustGage
2
Zwróć uwagę, że now()jest to sygnatura czasowa, więc ten zakres będzie również obejmował tylko część dnia dokładnie rok temu i część dnia dzisiejszego. Jeśli chcesz filtrować przez pełne dni, obsadź now()::datezgodnie z sugestią Alexa Howansky'ego.
tokenizer_fsj
1
@tokenizer_fsj current_datezamiast używaćnow()
Paul Tomblin,
66

Myślę, że to wystarczy:

SELECT * FROM MyTable WHERE mydate > now()::date - 365;
Alex Howansky
źródło
10
Zauważ, że w przeciwieństwie do interval '1 year'tego nie będzie uwzględniać lat przestępnych. Może to nie twój problem, ale jeśli tak, użyj mojej odpowiedzi.
Paul Tomblin
To powinna być akceptowana odpowiedź. now()zwraca sygnaturę czasową, więc po odjęciu '1 day'otrzymujesz znacznik czasu, który prawdopodobnie odfiltruje część dnia, w której chcesz zapytać. Większość ludzi chce filtrować jeden pełny dzień, więc użycie now()::datelub CURRENT_DATEjest konieczne.
tokenizer_fsj
9

Powinno to dać ci aktualną datę minus 1 rok:

select now() - interval '1 year';
coderaj
źródło
5

Możesz również sprawdzić za pomocą age()funkcji

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

age() zwróci interwał.

Na przykład age( '2015-09-22', now() )powróci-1 years -7 days -10:56:18.274131

Zobacz dokumentację postgresql

Doc
źródło
Powiedziano mi, że age()jest to funkcja tylko dla PostgreSQL (2018-10-05)
loxaxs
Jak id @loxaxs zapytania
HD1