Je souhaite renvoyer tous les enregistrements ajoutés à la base de données au cours des 30 derniers jours. Je dois convertir la date en mm/jj/aa pour des raisons d'affichage.
create_date between DATE_FORMAT(curdate(),'%m/%d/%Y') AND (DATE_FORMAT(curdate() - interval 30 day,'%m/%d/%Y'))
Ma déclaration ne limite pas les enregistrements aux 30 derniers jours - elle 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()
ne renvoie que la partie DATE
de la date. Par conséquent, si vous stockez create_date
en tant que DATETIME
avec la partie heure renseignée, cette requête ne sélectionnera pas la date du jour. enregistrements.
Dans ce cas, vous devrez utiliser NOW
à la 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 à votre format dans la SELECT
et effectuez la 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);
Utilisez ceci pour l'activité de date en cours et pour l'activité complète des 30 derniers jours, car le SYSDATE est variable dans une journée. Les 30 dernières journées ne contiendront pas toutes les données de cette journée.
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
Je suppose
SELECT myDate
FROM myTable
WHERE myDate BETWEEN DATEADD(DAY, -30, GETDATE()) AND GETDATE()