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!


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


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;

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

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


Mir wurde gesagt, dass age()es sich um eine PostgreSQL-Funktion handelt (2018-10-05)
loxaxs

Wie id die Frage @loxaxs
HD1
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.