Comment soustraire 30 jours de la date actuelle dans mysql ?
SELECT * FROM table
WHERE exec_datetime BETWEEN DATEDIFF(NOW() - 30 days) AND NOW();
Comment soustraire 30 jours de la date actuelle dans mysql ?
SELECT * FROM table
WHERE exec_datetime BETWEEN DATEDIFF(NOW() - 30 days) AND NOW();
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
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.
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
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.
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.
0 votes
Je préfère
SELECT * FROM table WHERE exec_datetime >= DATE_SUB(NOW(), INTERVAL 30 DAY);