7
votes

Requête MySQL à supprimer des lignes dont l'horodatage est plus ancien que l'horodatage actuel

Je cherche une requête capable de supprimer toutes les lignes d'une table dans une base de données où l'horodatage est plus âgé que la date / heure actuelle ou l'horodatage actuel.

J'apprécierais vraiment une aide ici de toute urgence!

Voici la requête que j'utilise mais comme je pensais que cela ne fonctionne pas: xxx


1 commentaires

Supprimer de TABLE_NAME Où TimeStamp <(Now (() - Intervalle 20 minutes)


5 Réponses :


10
votes
delete from events where timestamp < NOW()
should be enough.

2 commentaires

Merci pour la réponse rapide mais cela ne fonctionne pas! Sa suppression de tous les enregistrements même si l'horodatage n'est pas plus âgé que l'heure / la date actuelle


Par "plus âgé", vous vouliez dire que l'horodatage est> que l'heure actuelle? Ensuite, vous devez transformer la déclaration en horodatage> maintenant ()



2
votes
DELETE FROM events WHERE timestamp < NOW()

2 commentaires

Merci pour la réponse rapide mais cela ne fonctionne pas! Sa suppression de tous les enregistrements même si l'horodatage n'est pas plus âgé que l'heure / la date actuelle


Tournez la suppression en un horodatage SELECT. Pouvez-vous montrer quelques valeurs d'horodatage qui ne devraient pas être dans le résultat? Faites aussi un choix maintenant ().



28
votes

euh ... cela peut sembler idiot, mais chaque enregistrement de la table sera plus vieux que maintenant (), depuis maintenant () est calculé au moment où la requête est traitée. Si vous souhaitez supprimer un enregistrement plus ancien qu'un autre enregistrement, vous ne voulez pas utiliser maintenant (), mais l'horodatage de l'enregistrement que vous comparez le reste à. Ou, si vous souhaitez supprimer des enregistrements plus âgés d'un point plus ancien qu'un point spécifique, vous devez calculer l'horodatage que vous souhaitez utiliser pour comparer. Par exemple, pour supprimer des enregistrements de plus de 10 minutes, vous pouvez utiliser ceci:

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


1 commentaires

Si vous avez utilisé un horodatage numérique PHP, vous avez besoin de cette fonction supplémentaire UNIX_TMESTAMP (maintenant () - Intervalle 1 an);



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

0 commentaires

1
votes

Hibernate (HQL) Supprimer des enregistrements de plus de 7 jours

Je ne suis pas sûr, mais vous pouvez essayer ceci: p>

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


0 commentaires