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!


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


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;

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

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


On me dit qu'il age()s'agit d'une fonction PostgreSQL uniquement (05/10/2018)
loxaxs

As id the question @loxaxs
hd1
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.