web-dev-qa-db-fra.com

Comment soustraire 30 jours de la date / heure actuelle dans mysql?

Comment soustraire 30 jours de la date et l'heure actuelle dans mysql?

SELECT * FROM table
WHERE exec_datetime BETWEEN DATEDIFF(NOW() - 30 days) AND NOW();
165
user784637
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

257
zerkms

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

SELECT CURRENT_DATE - INTERVAL 30 DAY
108
Doug Fir

N'utilisons pas NOW() car vous perdez toute mise en cache ou optimisation de requête, car la requête est différente à chaque fois. Consultez la liste des fonctions que vous ne devriez pas utiliser dans le documentation MySQL .

Dans le code ci-dessous, supposons que ce tableau grandit 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 fréquent.

Notez que la date a été ajoutée en tant que chaîne. Il est préférable d’ajouter la date de cette façon, à partir de votre code d’appel, plutôt que d’utiliser la fonction NOW() car elle supprime 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 des choses de cette seconde à 30 jours avant cette seconde, mais ce n'est pas un cas d'utilisation courant dans mon expérience, donc j'espère que la requête simplifiée pourra bien vous servir.

20
Joseph Lust

Vous pouvez aussi utiliser

select CURDATE()-INTERVAL 30 DAY
12
Noby Nirmal

MySQL soustrayez les 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 
11
Eric Leschinski
SELECT date_format(current_date - INTERVAL 50 DAY,'%d-%b-%Y')

Vous pouvez formater en utilisant le format de date en SQL.

1
Varaj Vignesh

autrement

SELECT COUNT(*) FROM tbl_debug WHERE TO_DAYS(`when`) < TO_DAYS(NOW())-30 ;
0
zzapper

Si vous avez seulement besoin de la date et non de l'heure, utilisez:

select*from table where exec_datetime
between subdate(curdate(), 30)and curdate();

Puisque curdate() omet la composante heure, il est potentiellement plus rapide que now() et plus "sémantiquement correct" dans les cas où vous êtes seulement intéressé par la date.

De plus, la surcharge 2-entités de subdate() est potentiellement plus rapide que d'utiliser interval. interval est destiné aux cas où vous avez besoin d'un composant non journalier.

0
Pacerier