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()