MySQL Query – Enregistrements entre aujourd’hui et les 30 derniers jours

Je souhaite renvoyer tous les enregistrements ajoutés à la firebase database au cours des 30 derniers jours. Je dois convertir la date en mm / jj / aa à cause de l’affichage.

create_date between DATE_FORMAT(curdate(),'%m/%d/%Y') AND (DATE_FORMAT(curdate() - interval 30 day,'%m/%d/%Y')) 

Mon relevé ne limite pas les enregistrements aux 30 derniers jours – il sélectionne tous les enregistrements.

Est-ce que quelqu’un peut-il me montrer la bonne direction? J’ai l’impression d’être proche.

Merci et bonne semaine.

Vous devez appliquer DATE_FORMAT dans la clause SELECT , pas la clause WHERE :

 SELECT DATE_FORMAT(create_date, '%m/%d/%Y') FROM mytable WHERE create_date BETWEEN CURDATE() - INTERVAL 30 DAY AND CURDATE() 

Notez également que CURDATE() renvoie uniquement la partie DATE de la date. Par conséquent, si vous stockez create_date tant que DATETIME avec la partie heure remplie, cette requête ne sélectionnera pas les enregistrements du jour.

Dans ce cas, vous devrez utiliser NOW place:

 SELECT DATE_FORMAT(create_date, '%m/%d/%Y') FROM mytable WHERE create_date BETWEEN NOW() - INTERVAL 30 DAY AND NOW() 
 SELECT * FROM < table_name > WHERE < date_field > BETWEEN DATE_SUB(NOW(), INTERVAL 30 DAY) AND NOW(); 

DATE_FORMAT renvoie une chaîne, vous utilisez donc deux chaînes dans votre clause BETWEEN , qui ne fonctionnera pas comme prévu.

Au lieu de cela, convertissez la date en votre format dans le SELECT et faites le BETWEEN pour les dates réelles. Par exemple,

 SELECT DATE_FORMAT(create_date, '%m/%d/%y') as create_date_formatted FROM table WHERE create_date BETWEEN (CURDATE() - INTERVAL 30 DAY) AND CURDATE() 

Vous pouvez aussi écrire ceci dans mysql –

 SELECT DATE_FORMAT(create_date, '%m/%d/%Y') FROM mytable WHERE create_date < DATE_ADD(NOW(), INTERVAL +1 MONTH); 

Pour l’activité de la date du jour et l’activité complète des 30 derniers jours, utilisez ceci, puisque le SYSDATE est variable dans un jour où le 30e jour précédent n’aura pas l’intégralité des données pour ce jour.

 SELECT DATE_FORMAT(create_date, '%m/%d/%Y') FROM mytable WHERE create_date BETWEEN CURDATE() - INTERVAL 30 DAY AND SYSDATE() 

Voici une solution sans utiliser la fonction curdate() , c’est une solution pour ceux qui utilisent TSQL

 SELECT myDate FROM myTable WHERE myDate BETWEEN DATEADD(DAY, -30, GETDATE()) AND GETDATE()