MySQL Query – Record tra oggi e gli ultimi 30 giorni

Voglio restituire tutti i record che sono stati aggiunti al database negli ultimi 30 giorni. Ho bisogno di convertire la data in mm / gg / aa a scopo di visualizzazione.

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

La mia affermazione non riesce a limitare i record negli ultimi 30 giorni: seleziona tutti i record.

Qualcuno può indicarmi la giusta direzione? Mi sembra di essere vicino.

Grazie e buona settimana.

Devi applicare DATE_FORMAT nella clausola SELECT , non nella clausola WHERE :

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

Si noti inoltre che CURDATE() restituisce solo la parte DATE della data, quindi se si archivia create_date come DATETIME con la porzione di tempo riempita, questa query non selezionerà i record di oggi.

In questo caso, dovrai utilizzare NOW invece:

 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 restituisce una stringa, quindi stai utilizzando due stringhe nella clausola BETWEEN , che non funzionerà come previsto.

Invece, converti la data nel tuo formato in SELECT e fai il BETWEEN per le date attuali. Per esempio,

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

Puoi anche scrivere questo in mysql –

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

Per l’attività di data corrente e l’attività completa per i precedenti 30 giorni, utilizzare questo, poiché SYSDATE è variabile in un giorno il giorno precedente 30 non avrà l’intero dati per quel giorno.

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

Ecco una soluzione senza usare la funzione curdate() , questa è una soluzione per coloro che usano TSQL credo

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