148 votes

PostgreSQL, vérification de la date par rapport à "aujourd'hui".

Je me demandais si quelqu'un pouvait m'aider avec un peu de Postgres. J'ai une table qui possède une colonne appelée mydate qui 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 me ferai un plaisir de chercher la référence moi-même. Quelqu'un peut-il m'indiquer la bonne direction ?

Merci !

2 votes

Pour mémoire, la documentation est aquí -- Il faut un peu de temps pour s'y habituer, mais c'est extrêmement complet.

249voto

Paul Tomblin Points 83687
select * from mytable where mydate > now() - interval '1 year';

Si vous ne vous souciez que de la date et non de l'heure, remplacez-la par current_date para now()

select * from mytable where mydate > current_date - interval '1 year';

0 votes

C'est parfait ! Merci

4 votes

Notez que now() est un horodatage, de sorte que cette plage ne comprendra également 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 entières, lancez l'option now()::date comme l'a suggéré Alex Howansky.

1 votes

@tokenizer_fsj d'utilisation current_date au lieu de now()

76voto

Alex Howansky Points 16820

Je pense que ça va le faire :

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

12 votes

Notez que, contrairement à interval '1 year' ce qui ne respectera pas les années bissextiles. Cela ne vous concerne peut-être pas, mais si c'est le cas, utilisez ma réponse.

0 votes

Cela devrait être la réponse acceptée. now() renvoie un horodatage, donc après avoir soustrait '1 day' vous obtenez 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 l'utilisation de now()::date o CURRENT_DATE est nécessaire.

9voto

coderaj Points 91

Cela devrait vous donner la date actuelle moins 1 an :

select now() - interval '1 year';

8voto

Doc Points 137

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

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

age() retournera un intervalle.

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

Véase documentation postgresql

0 votes

On m'a dit age() est une fonction réservée à PostgreSQL (2018-10-05)

0 votes

Comme la question @loxaxs

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X