77 votes

MySQL sélectionne toutes les lignes du mois dernier jusqu'à (maintenant () - 1 mois), à des fins de comparaison

J'ai besoin d'aide pour écrire une requête MySQL pour me montrer les lignes du mois dernier, mais pas le mois entier, seulement jusqu'au même jour, heure et minute qu'aujourd'hui (), mais 1 mois avant.

Ainsi, par exemple, si aujourd'hui est le 19/5 à 17h25, je dois sélectionner des lignes de minuit le 1/4 à 12h25 du 19/04 à 17h25 (de la même année aussi bien sûr).

Merci!

142voto

GolezTrol Points 54531

Vous pouvez obtenir le premier du mois, en calculant le last_day du mois précédent et en ajoutant un jour. C'est gênant, mais je pense que c'est mieux que de formater une date sous forme de chaîne et de l'utiliser pour le calcul.

 select 
  *
from
  yourtable t
where
  /* Greater or equal to the start of last month */
  t.date >= DATE_ADD(LAST_DAY(DATE_SUB(NOW(), INTERVAL 2 MONTH)), INTERVAL 1 DAY) and
  /* Smaller or equal than one month ago */
  t.date <= DATE_SUB(NOW(), INTERVAL 1 MONTH)

41voto

Ike Walker Points 21162

Obtenir il y a un mois est facile avec une seule fonction MySQL :

 SELECT DATE_SUB(NOW(), INTERVAL 1 MONTH);

ou

 SELECT NOW() - INTERVAL 1 MONTH;

De mémoire, je ne vois pas de moyen élégant d'obtenir le premier jour du mois dernier dans MySQL, mais cela fonctionnera certainement :

 SELECT CONCAT(LEFT(NOW() - INTERVAL 1 MONTH,7),'-01');

Mettez-les ensemble et vous obtenez une requête qui résout votre problème :

 SELECT *
FROM your_table
WHERE t >= CONCAT(LEFT(NOW() - INTERVAL 1 MONTH,7),'-01')
AND t <= NOW() - INTERVAL 1 MONTH

26voto

Chinu Points 704

Code simple s'il vous plaît vérifier

 SELECT * FROM table_name WHERE created <= (NOW() - INTERVAL 1 MONTH)

10voto

Senad Meškin Points 7248

Voici un exemple d'opération de date MySQL correspondant à votre question :

 SELECT DATE_ADD( now( ) , INTERVAL -1 MONTH ) 

Ce qui précède retournera la date et l'heure il y a un mois

Vous pouvez donc l'utiliser comme suit :

 SELECT * 
FROM your_table 
WHERE Your_Date_Column BETWEEN '2011-01-04' 
    AND DATE_ADD(NOW( ), INTERVAL -1 MONTH )

8voto

tilak barthi Points 61
SELECT
     * 
FROM 
     <table_name> 
WHERE 
     <date_field> BETWEEN DATE_SUB(NOW(), INTERVAL 1 MONTH) AND NOW();

De même, vous pouvez sélectionner des enregistrements pour 1 mois, 2 mois, etc.

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