PostgreSQL, Überprüfungsdatum relativ zu "heute"

100

Ich habe mich gefragt, ob jemand bei einigen Postgres helfen kann. Ich habe eine Tabelle mit einer Spalte namens mydatepostgres date type. Ich möchte so etwas tun wie:

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

Ich habe Postgres noch nie benutzt und ich bin sicher, ich muss nur den Namen einiger Funktionen kennen - ich werde die Referenz gerne selbst nachschlagen. Kann mich jemand in die richtige Richtung weisen?

Vielen Dank!

Joseph
quelle
2
Die Dokumentation ist hier - es ist etwas gewöhnungsbedürftig, aber äußerst umfassend.
Fund Monica Klage

Antworten:

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

Wenn Sie nur über das Datum und die Zeit nicht kümmern, Ersatz current_datefürnow()

Paul Tomblin
quelle
Dies ist perfekt! Vielen Dank
JustGage
1
Beachten Sie, dass dies now()ein Zeitstempel ist, sodass dieser Bereich auch nur einen Teil des Tages von vor genau einem Jahr und einen Teil des heutigen Tages umfasst. Wenn Sie an ganzen Tagen filtern möchten, now()::datebesetzen Sie, wie von Alex Howansky vorgeschlagen.
Tokenken_fsj
1
@tokenizer_fsj der Verwendung current_dateanstelle vonnow()
Paul Tomblin
65

Ich denke, das wird es tun:

SELECT * FROM MyTable WHERE mydate > now()::date - 365;
Alex Howansky
quelle
10
Beachten Sie, dass im Gegensatz interval '1 year'dazu Schaltjahre nicht berücksichtigt werden. Das ist vielleicht kein Problem von Ihnen, aber wenn ja, verwenden Sie meine Antwort.
Paul Tomblin
Dies sollte die akzeptierte Antwort sein. now()Gibt einen Zeitstempel zurück. Nach dem Subtrahieren erhalten '1 day'Sie einen Zeitstempel, der wahrscheinlich einen Teil des Tages herausfiltert, an dem Sie interessiert sind. Die meisten Menschen möchten an einem einzigen ganzen Tag filtern und verwenden daher now()::dateoder CURRENT_DATEist erforderlich.
Tokenken_fsj
9

Dies sollte Ihnen das aktuelle Datum minus 1 Jahr geben:

select now() - interval '1 year';
coderaj
quelle
5

Sie können dies auch mit der age()Funktion überprüfen

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

age() wird ein Intervall zurückgeben.

Zum Beispiel age( '2015-09-22', now() )wird zurückkehren-1 years -7 days -10:56:18.274131

Siehe postgresql-Dokumentation

Doc
quelle
Mir wurde gesagt, dass age()es sich um eine PostgreSQL-Funktion handelt (2018-10-05)
loxaxs
Wie id die Frage @loxaxs
HD1