276 votes

Comment soustraire 30 jours de la date courante dans mysql ?

Comment soustraire 30 jours de la date actuelle dans mysql ?

SELECT * FROM table
WHERE exec_datetime BETWEEN DATEDIFF(NOW() - 30 days) AND NOW();

0 votes

Je préfère SELECT * FROM table WHERE exec_datetime >= DATE_SUB(NOW(), INTERVAL 30 DAY);

390voto

zerkms Points 105994
SELECT * FROM table
WHERE exec_datetime BETWEEN DATE_SUB(NOW(), INTERVAL 30 DAY) AND NOW();

http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-add

173voto

Doug Fir Points 5217

Pour tous ceux qui ne veulent pas utiliser DATE_SUB , utiliser CURRENT_DATE :

SELECT CURRENT_DATE - INTERVAL 30 DAY

11 votes

Plus lisible mais avec un résultat différent de celui obtenu en utilisant NOW() - INTERVAL 30 DAY . Puisque la question mentionne "soustraire 30 jours de l'année en cours". date "Il se peut que cela ne corresponde pas aux souhaits de l'OP.

4 votes

@ypercube puis utiliser current_timestamp au lieu de current_date

32voto

Eric Leschinski Points 14289

MySQL soustrait des jours à partir de maintenant :

select now(), now() - interval 1 day

Impressions :

2014-10-08 09:00:56     2014-10-07 09:00:56

Autres arguments d'unité d'expression temporelle d'intervalle :

https://dev.mysql.com/doc/refman/5.5/en/expressions.html#temporal-intervals

select now() - interval 1 microsecond 
select now() - interval 1 second 
select now() - interval 1 minute 
select now() - interval 1 hour 
select now() - interval 1 day 
select now() - interval 1 week 
select now() - interval 1 month 
select now() - interval 1 year

28voto

Joseph Lust Points 4961

N'utilisons pas NOW() car vous perdez toute mise en cache ou optimisation de la requête parce que celle-ci est différente à chaque fois. Voir la liste des fonctions à ne pas utiliser dans la section Documentation MySQL .

Dans le code ci-dessous, nous supposons que ce tableau croît avec le temps. De nouveaux éléments sont ajoutés et vous souhaitez afficher uniquement les éléments des 30 derniers jours. C'est le cas le plus courant.

Notez que la date a été ajoutée sous forme de chaîne de caractères. Il est préférable d'ajouter la date de cette manière, à partir de votre code d'appel, plutôt que d'utiliser la fonction NOW() car elle détruit la mise en cache.

SELECT * FROM table WHERE exec_datetime >= DATE_SUB('2012-06-12', INTERVAL 30 DAY);

Vous pouvez utiliser BETWEEN si vous voulez vraiment avoir des informations de cette seconde à 30 jours avant cette seconde, mais ce n'est pas un cas d'utilisation courant d'après mon expérience, j'espère donc que la requête simplifiée vous sera utile.

21voto

Noby Nirmal Points 323

Vous pouvez également utiliser

select CURDATE()-INTERVAL 30 DAY

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