PostgreSQL, data di controllo relativa a "oggi"


103

Mi chiedevo se qualcuno potesse aiutare con alcuni Postgres. Ho una tabella che ha una colonna chiamata mydateche è un tipo di data postgres. Voglio fare qualcosa come:

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

Non ho mai usato Postgres prima e sono sicuro che ho solo bisogno di conoscere il nome di alcune funzioni - cercherò volentieri il riferimento da solo. Qualcuno può indicarmi la giusta direzione?

Grazie!


2
Per la cronaca, la documentazione è qui : ci vuole un po 'per abituarsi, ma è estremamente completa.
Finanzia la causa di Monica il

Risposte:


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

Se vi interessa soltanto la data e non il tempo, sostituto current_datepernow()


Questo è perfetto! Grazie
JustGage

1
Tieni presente che now()è un timestamp, quindi questo intervallo includerà anche solo una parte della giornata di esattamente un anno fa e una parte della giornata odierna. Se vuoi filtrare per giorni interi, now()::datetrasmetti come suggerito da Alex Howansky.
tokenizer_fsj

1
@tokenizer_fsj di utilizzo al current_dateposto dinow()
Paul Tomblin

66

Penso che questo lo farà:

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

10
Nota che interval '1 year', a differenza di , questo non rispetterà gli anni bisestili. Potrebbe non essere una tua preoccupazione, ma se lo è, usa la mia risposta.
Paul Tomblin

Questa dovrebbe essere la risposta accettata. now()restituisce un timestamp, quindi dopo aver sottratto '1 day', si finisce con un timestamp che probabilmente filtrerà la parte del giorno che si è interessati a interrogare. La maggior parte delle persone desidera filtrare in un solo giorno intero, quindi è necessario utilizzare now()::dateo CURRENT_DATE.
tokenizer_fsj

9

Questo dovrebbe darti la data corrente meno 1 anno:

select now() - interval '1 year';

5

Puoi anche controllare usando la age()funzione

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

age() restituirà un intervallo.

Ad esempio age( '2015-09-22', now() )tornerà-1 years -7 days -10:56:18.274131

Vedere la documentazione di postgresql


Mi è stato detto che age()è una funzione solo per PostgreSQL (2018-10-05)
loxaxs

Come la domanda @loxaxs
hd1
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.