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.