PostgreSQL, vérification de la date par rapport à «aujourd'hui»

103

Je me demandais si quelqu'un pouvait aider avec certains Postgres. J'ai une table qui a une colonne appelée mydatequi est un type de date postgres. Je veux faire quelque chose comme:

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

Je n'ai jamais utilisé Postgres auparavant et je suis sûr que j'ai juste besoin de connaître le nom de certaines fonctions - je chercherai volontiers la référence moi-même. Est-ce que quelqu'un peut-il me montrer la bonne direction?

Merci!

Joseph
la source
2
Pour mémoire, la documentation est - il faut un peu de temps pour s'y habituer, mais elle est extrêmement complète.
Fonder le procès de Monica le

Réponses:

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

Si vous ne vous préoccupez que la date et pas le temps, substitut current_datepournow()

Paul Tomblin
la source
C'est parfait! Merci
JustGage
1
Notez qu'il now()s'agit d'un horodatage, cette plage n'inclura donc qu'une partie de la journée d'il y a exactement un an et une partie de la journée d'aujourd'hui. Si vous souhaitez filtrer sur des journées complètes, now()::datelancez le casting comme l'a suggéré Alex Howansky.
tokenizer_fsj
1
@tokenizer_fsj d'utilisation current_dateau lieu denow()
Paul Tomblin
66

Je pense que cela le fera:

SELECT * FROM MyTable WHERE mydate > now()::date - 365;
Alex Howansky
la source
10
Notez qu'à la différence interval '1 year', cela ne respectera pas les années bissextiles. Cela ne vous concerne peut-être pas, mais si tel est le cas, utilisez ma réponse.
Paul Tomblin
Cela devrait être la réponse acceptée. now()renvoie un horodatage, donc après la soustraction '1 day', vous vous retrouvez avec un horodatage qui filtrera probablement une partie de la journée que vous souhaitez interroger. La plupart des gens veulent filtrer sur une seule journée complète, et donc utiliser now()::dateou CURRENT_DATEest nécessaire.
tokenizer_fsj
9

Cela devrait vous donner la date actuelle moins 1 an:

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

Vous pouvez également vérifier en utilisant la age()fonction

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

age() wil renvoie un intervalle.

Par exemple age( '2015-09-22', now() )retournera-1 years -7 days -10:56:18.274131

Voir la documentation postgresql

Doc
la source
On me dit qu'il age()s'agit d'une fonction PostgreSQL uniquement (05/10/2018)
loxaxs
As id the question @loxaxs
hd1