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!


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()


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;

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';

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


Powiedziano mi, że age()jest to funkcja tylko dla PostgreSQL (2018-10-05)
loxaxs

Jak id @loxaxs zapytania
HD1
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.