Zastanawiałem się, czy ktoś mógłby pomóc z jakimiś Postgresami. Mam tabelę, która ma kolumnę o nazwie, mydate
któ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!
sql
postgresql
Józefa
źródło
źródło
Odpowiedzi:
select * from mytable where mydate > now() - interval '1 year';
Jeśli tylko dbać o terminie i nie czas, substytutem
current_date
dlanow()
źródło
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()::date
zgodnie z sugestią Alexa Howansky'ego.current_date
zamiast używaćnow()
Myślę, że to wystarczy:
SELECT * FROM MyTable WHERE mydate > now()::date - 365;
źródło
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.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życienow()::date
lubCURRENT_DATE
jest konieczne.Powinno to dać ci aktualną datę minus 1 rok:
select now() - interval '1 year';
źródło
Możesz również sprawdzić za pomocą
age()
funkcjiselect * 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
źródło
age()
jest to funkcja tylko dla PostgreSQL (2018-10-05)