2012-04-17 21 views

Respuesta

8
delete from events where timestamp < NOW() 

debería ser suficiente.

+0

Gracias por la rápida respuesta, pero que no está funcionando ! Está eliminando todos los registros aunque la marca de tiempo no sea anterior a la fecha/hora actual – Arihant

+0

por "anterior" significa que la marca de tiempo es> que la hora actual? entonces tienes que convertir la declaración en timestamp> NOW() –

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

o si se trata de una fecha y hora estándar

DELETE FROM events WHERE timestamp < NOW() 
+0

¡Gracias por la respuesta rápida pero eso no funciona! Está eliminando todos los registros aunque la marca de tiempo no sea anterior a la hora/fecha actual – Arihant

+0

Convierta la eliminación en una marca de tiempo seleccionada. ¿Puedes mostrar un par de valores de la marca de tiempo que no deberían estar en el conjunto de resultados? También haga un SELECCIONAR AHORA(). –

21

Um ... Esto puede parecer tonto, pero cada registro de la tabla será mayor que ahora(), ya que ahora() se calcula en el momento en que se procesa la consulta Si desea eliminar un registro que sea anterior a otro registro, entonces no desea usar Now(), sino la marca de tiempo del registro al que está comparando el resto. O bien, si desea eliminar registros que son más antiguos que un punto específico en el tiempo, entonces necesita calcular la marca de tiempo que desea usar para comparar. Por ejemplo, para eliminar los registros de más de 10 minutos, se puede usar esto:

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

O, para borrar los registros que tienen más de un día de edad:

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

para puntos específicos en el tiempo (por ejemplo, octubre 12 de 2012 a las 4:15:00 PM GMT), hay un método para hacerlo, pero la sintaxis se me escapa, en este momento. ¿Dónde está mi manual de MySQL? :)

+2

Si usó una marca de tiempo PHP numérica, necesita esta función adicional 'UNIX_TIMESTAMP (NOW() - INTERVAL 1 AÑO);' –

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

Hibernate (HQL) Eliminar registros de más de 7 días

No estoy seguro, pero se puede intentar esto:

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); 
    } 
Cuestiones relacionadas