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