2012-12-04 13 views
6

Ho un'applicazione Rails che utilizza MYSQL come database. Per alcune condizioni, devo cancellare tutti i record dalla tabella che è stata memorizzata esattamente 2 ore prima dell'ora corrente.Come calcolare la differenza di tempo in MySQL

La mia domanda è:

DELETE FROM TABLE_NAME WHERE (NOW() - created_at) > 7200; 

Qui create_at è datetime tipo di colonna. Memorizzare il valore nel formato "2012-12-04 06:39:44"

Il mio problema è che la query precedente recupera i record anche se il tempo di creazione del record è di soli 40-50 minuti e viene cancellato. L'unico problema è che il record è stato eliminato dopo aver raggiunto da 40 a 50 minuti dal momento in cui creava il tempo.

Qualcuno può correggere la mia richiesta. Voglio la soluzione MySQL. Please help me

+0

Si stanno mescolando diversi tipi di dati nella stessa espressione. – symcbean

risposta

4

Probabilmente bisogno di questo se si desidera cancellare record creati esattamente 2 ore fa:

DELETE FROM TABLE_NAME WHERE created_at = NOW() - INTERVAL 2 HOUR 

o del presente, che eliminare tutti i record creati più di 2 ore fa:

DELETE FROM TABLE_NAME WHERE created_at < NOW() - INTERVAL 2 HOUR 
+0

Grazie Fthiella, fammi provare e ti faccio sapere – palani

1

Prova questo ::

DELETE FROM TABLE_NAME WHERE TIMEDIFF(NOW(),created_at) < '02:00:00'; 
+0

Darò prova e ti faccio sapere ragazzi – palani

+0

ok, per favore fatemi sapere, se vi siete bloccati –

0

Prova:

DELETE FROM TABLE_NAME WHERE created_at<DATE_SUB(NOW(),INTERVAL 2 HOUR) 

Questa query eliminerà tutto creato più di 2 ore fa. Mettere un segno di uguale significherebbe ESATTAMENTE 2 ore fa (in seconda). Ovviamente è possibile formattare la data in modo da considerare solo i minuti, ma ciò rallenterebbe la query. Se created_at è indicizzato (e penso che dovrebbe essere) non eseguire alcuna funzione su di esso in modo che possa utilizzare l'indice per eseguire l'eliminazione più velocemente.

+0

Perché non TIMEDIFF? –

+0

Nel mio caso ho applicato l'intervallo a NOW(). Ciò lascia intatta la colonna created_at in modo che possa utilizzare l'indice per eseguire l'eliminazione più velocemente. – Zagor23

0

Capisco che si desidera eliminare tutti i record creati in un intervallo di tempo. Pertanto, non si dovrebbe applicare un operatore "maggiore di" all'operazione di sottrazione. Invece dovresti provare a specificare un intervallo di tempo appropriato.

Si potrebbe anche dare un'occhiata alla funzione TimeDiff http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_timediff

dispiace io non sono in grado di pubblicare la dichiarazione giusta per voi, dal momento che non ho un server MySQL a portata di mano.

Problemi correlati