IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Oracle Discussion :

Utilisation de SYSDATE pour effacer de vieux records


Sujet :

SQL Oracle

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Utilisation de SYSDATE pour effacer de vieux records
    Bonjour à tous et à toutes,

    Je voudrais effacer de ma table tous les records de plus de 2ans de manière automatisé sans entrer la date du jour à chaque fois que je lance la query.

    Voilà ce que j'avais pensé faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    DELETE FROM "ISDB"."AGENTHISTORY"
    WHERE SYSDATE<=now-24mo
    Bon bien évidement cela ne fonctionne pas.

    Pourriez vous me guider dans une utilisation plus adéquate avec SYSDATE pour effectuer cela ?

    D'avance merci à tous et à toutes pour votre aide

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Août 2005
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 68
    Points : 78
    Points
    78
    Par défaut
    Si la table AGENTHISTORY contient une colonne DATE du genre DATE_INSERTION, ça donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    DELETE FROM "ISDB"."AGENTHISTORY"
    WHERE add_months(DATE_INSERTION, 24) <= sysdate;
    S'il n'y a pas de colonne qui permet de retrouver la date de l'enregistrement, ça va être (à ma connaissance) impossible.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2007
    Messages : 31
    Points : 22
    Points
    22
    Par défaut
    Je pense qu'un truc de ce genre devrait marcher:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DELETE FROM "ISDB"."AGENTHISTORY"
    WHERE MYDATE <= SYSDATE - 2*365
    Où MYDATE est le nom de ton champ date
    Tu retireras de ta table les champs datant d'il y a au moins 2*365 jours


    edit: posté trop tard, et la solution plus haut est plus élégante...

  4. #4
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci à tous pour votre aide, cela fonctionne bien.

    En effet j'ai un champ de type Date nommé OPERATION_DATE
    dans mon cas cela donne ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    DELETE FROM "ISDB"."AGENTHISTORY"
    WHERE add_months(OPERATION_DATE, 24) <= sysdate;
    Et cela fonctionne très bien.

    Je vous remercie pour votre aide.

    Bonne après midi à tous.
    Laurent.

  5. #5
    Membre habitué Avatar de Loyd1974
    Profil pro
    Inscrit en
    Août 2007
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 176
    Points : 196
    Points
    196
    Par défaut
    Citation Envoyé par Devil_350 Voir le message
    Merci à tous pour votre aide, cela fonctionne bien.

    En effet j'ai un champ de type Date nommé OPERATION_DATE
    dans mon cas cela donne ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    DELETE FROM "ISDB"."AGENTHISTORY"
    WHERE add_months(OPERATION_DATE, 24) <= sysdate;
    Et cela fonctionne très bien.

    Je vous remercie pour votre aide.

    Bonne après midi à tous.
    Laurent.
    Juste un petit point, si tu as un index sur ta colonne OPERATION_DATE, il vaut mieux faire porter la conversion sur SYSDATE en faisant simplement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    where OPERATION_DATE <= add_months(SYSDATE,-24)
    Il faut bien sûr ne pas oublier le "-"

  6. #6
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci pour les infos supplémentaires Loyd

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Utiliser des variables pour un record ?
    Par Nohak_ dans le forum PL/SQL
    Réponses: 2
    Dernier message: 14/04/2014, 16h57
  2. Réponses: 9
    Dernier message: 16/02/2007, 16h10
  3. utilisation du mid pour tester le début d'un champ
    Par PrinceMaster77 dans le forum ASP
    Réponses: 4
    Dernier message: 09/07/2004, 14h10
  4. Réponses: 36
    Dernier message: 13/05/2004, 19h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo