2012-04-17 5 views

risposta

8
delete from events where timestamp < NOW() 

dovrebbe essere sufficiente.

+0

Grazie per la rapida risposta, ma che non sta funzionando ! La sua cancellazione di tutti i record anche se il timestamp non è più vecchio rispetto alla data/ora corrente – Arihant

+0

da "vecchio" significava che il timestamp è> rispetto all'ora corrente? quindi devi trasformare la dichiarazione in timestamp> NOW() –

1
DELETE FROM events WHERE timestamp < UNIX_TIMESTAMP(NOW()) 

o se si tratta di un datetime standard di

DELETE FROM events WHERE timestamp < NOW() 
+0

Grazie per la risposta rapida ma non funziona! Si sta eliminando tutti i record anche se il timestamp non è precedente all'ora/data corrente – Arihant

+0

Trasforma l'eliminazione in un timestamp di selezione. Puoi mostrare un paio di valori di timestamp che non dovrebbero essere nel set di risultati? Fai anche una SELEZIONA ORA(). –

21

Um ... Questo può sembrare stupido, ma ogni record nella tabella sarà più vecchio di Ora(), dal momento che ora() è calcolata a il tempo in cui viene elaborata la query. Se si desidera eliminare un record più vecchio di un altro, non si desidera utilizzare Now(), ma il timestamp dal record a cui si sta confrontando il resto. In alternativa, se si desidera eliminare record più vecchi di un punto specifico nel tempo, è necessario calcolare il timestamp che si desidera utilizzare per il confronto. Ad esempio, per eliminare i record più vecchio di 10 minuti, è possibile utilizzare questo:

DELETE FROM events WHERE timestamp < (NOW() - INTERVAL 10 MINUTE) 

Oppure, per l'eliminazione di record che sono più di un giorno antiche:

DELETE FROM events WHERE timestamp < (NOW() - INTERVAL 1 DAY) 

Per i punti specifici nel tempo (ad esempio, ottobre 12th, 2012 at 4:15:00 PM GMT), c'è un metodo per farlo, ma la sintassi mi sfugge, proprio ora. Dov'è il mio manuale MySQL? :)

+2

Se si è utilizzato un timestamp numerico PHP, è necessaria questa funzione extra 'UNIX_TIMESTAMP (NOW() - INTERVAL 1 ANNO);' –

-3
DELETE FROM table WHERE date < '2011-09-21 08:21:22'; 
1

Hibernate (HQL) eliminare i record più vecchi di 7 giorni

Non sono sicuro, ma si può provare questo:

String hqlQuery = "from PasswordHistory pwh " 
      + "where pwh.created_date < datediff(curdate(), INTERVAL 7 DAY)"; 

      List<Long> userList = (List<Long>)find(hqlQuery); 
    deleteAll(userList);// from baseDao 

public void deleteAll(Collection list) { 
     getHibernateTemplate().deleteAll(list); 
    }