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

SQLite Discussion :

DELETE avec condition strftime


Sujet :

SQLite

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 32
    Points : 26
    Points
    26
    Par défaut DELETE avec condition strftime
    Bonjour à tous
    J'ai une table iinst qui contient une colone datetime au format timestamp
    Je voudrai détruire des enregistrements de cette table si ces enregistrement contiennent un jour égal à une valeur. (exemple: 29)
    Voici ma requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DELETE FROM iinst WHERE strftime('%e',datetime) = 29;
    Mais ça ne détruit pas les enregistrements, j'ai du rater quelque chose ;-)
    Merci pour votre aide
    Philippe

  2. #2
    Membre extrêmement actif Avatar de Jon Shannow
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2011
    Messages
    4 472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2011
    Messages : 4 472
    Points : 10 114
    Points
    10 114
    Par défaut
    Bonjour,

    Je crois que strftime renvoie une chaine de caractère.
    Peut-être que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DELETE FROM iinst WHERE strftime('%e',datetime) = '29';
    Fonctionnera.

    C'est juste une piste, je n'ai pas essayé.

    JS
    Au nom du pèze, du fisc et du St Estephe
    Au nom du fric, on baisse son froc...

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 32
    Points : 26
    Points
    26
    Par défaut
    Bonjour et merci pour ta réponse.
    J'avais déjà essayé avec '29' mais sans succès
    Ma colonne datetime est un timestamp, c'est peut-être cela qui gêne, mais je ne sais pas comment le convertir au format date, j'ai aussi essayé ça
    DELETE FROM iinst WHERE strftime('%e',date(datetime)) = 29 mais snif snif pas bon aussi
    ++
    Philippe

  4. #4
    Membre extrêmement actif Avatar de Jon Shannow
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2011
    Messages
    4 472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2011
    Messages : 4 472
    Points : 10 114
    Points
    10 114
    Par défaut
    As-tu essayé de faire un SELECT avec la même condition pour voir quels enregistrements ça te renvoie.

    En essayant avec un SELECT strftime('%e', unevaleur), ça te donnerai ce que ça renvoie avec une valeur que tu connais.

    Ensuite, c'est peut-être le nom de ta colonne qui pose problème. Datetime c'est pas un mot réservé ?
    Au nom du pèze, du fisc et du St Estephe
    Au nom du fric, on baisse son froc...

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 32
    Points : 26
    Points
    26
    Par défaut
    Comment fais tu le SELECT avec strftime ?
    ++

  6. #6
    Membre extrêmement actif Avatar de Jon Shannow
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2011
    Messages
    4 472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2011
    Messages : 4 472
    Points : 10 114
    Points
    10 114
    Par défaut
    Ben
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT "une colonne de ta table" FROM iinst WHERE strftime('%e', iinst.datetime) = '29'
    Mais aussi, juste pour voir

    SELECT strftime('%e', '2024-07-30 11:03:15.000'
    Par exemple
    Au nom du pèze, du fisc et du St Estephe
    Au nom du fric, on baisse son froc...

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 32
    Points : 26
    Points
    26
    Par défaut
    nada de nada ;-)

  8. #8
    Membre extrêmement actif Avatar de Jon Shannow
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2011
    Messages
    4 472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2011
    Messages : 4 472
    Points : 10 114
    Points
    10 114
    Par défaut
    J'utilise SQLiteExpert (free edition) pour faire mes tests SQL et créer mes bases SQLite.

    Dans SQLiteExpert si j'execute
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT strftime('%e', datetime())
    j'obtiens '30'

    Si je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT strftime('%e', '2024-07-25 12:25:10.350')
    j'obtiens '25'

    Enfin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT strftime('%e', '2024-07-04 12:25:10.350')
    J'obtiens '4'

    Donc, je dirais que la fonction fonctionne correctement

    Essaies de faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT une_autre_colonne, datetime FROM iinst LIMIT 20
    (20 par exemple, juste pour que ce ne soit pas trop long) et donnes le résultat, pour voir ce qu'il y a dans ta colonne datetime.
    Au nom du pèze, du fisc et du St Estephe
    Au nom du fric, on baisse son froc...

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 32
    Points : 26
    Points
    26
    Par défaut
    Effectivement, mais c'est ce que je disais au début de mon post, tu passe une chaine de caractères fromatée "date" dans la fonction strftime et pas un timestamp.
    Je pense que cela vient de la non ?
    Merci en tout cas pour ton aide
    ++

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 32
    Points : 26
    Points
    26
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELCT id, datetime FROM iinst LIMIT 20
    cela me retourne ça
    ++

    1|1722325937667
    2|1722325939252
    3|1722325940836
    4|1722325942436
    5|1722325944020
    6|1722325945604
    7|1722325947204
    8|1722243600000
    9|1722325948789
    10|1722243600000
    11|1722325950373
    12|1722325951957
    13|1722325953557
    14|1722325955142
    15|1722325956726
    16|1722325958310
    17|1722325959910
    18|1722325961495
    19|1722325963079
    20|1722325964679

  11. #11
    Membre éprouvé
    Homme Profil pro
    Chef de projets retraité
    Inscrit en
    Juillet 2011
    Messages
    431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Chef de projets retraité
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2011
    Messages : 431
    Points : 1 127
    Points
    1 127
    Par défaut
    Bonjour,

    Si j'en crois ta sortie, la date est exprimée en millisecondes depuis le 01/01/1970 (UNIXEPOCH)

    Donc pour ton problème il te faut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select id, strftime('%e', date(datetime/1000, 'unixepoch')) from iinst;
    NB. Il doit y avoir des moyens de simplifier la formule mais il fait actuellement trop chaud pour chercher

    Cordialement

  12. #12
    Membre extrêmement actif Avatar de Jon Shannow
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2011
    Messages
    4 472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2011
    Messages : 4 472
    Points : 10 114
    Points
    10 114
    Par défaut
    Dans ce cas, pourrais-tu essayer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT une_autre_colonne, datetime(iinst.datetime) FROM iinst LIMIT 20
    Pour voir le résultat
    Au nom du pèze, du fisc et du St Estephe
    Au nom du fric, on baisse son froc...

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 32
    Points : 26
    Points
    26
    Par défaut
    Salut à tous et merci pour vos aides ;-)
    La formule me retourne tous les id de la table iinst
    Du coup je me perds un peu car à l'origine je souhaite détruire tous les enregistrements dont le jour est égal à 'x' par un DELETE
    ++

    Citation Envoyé par acaumes Voir le message
    Bonjour,

    Si j'en crois ta sortie, la date est exprimée en millisecondes depuis le 01/01/1970 (UNIXEPOCH)

    Donc pour ton problème il te faut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select id, strftime('%e', date(datetime/1000, 'unixepoch')) from iinst;
    NB. Il doit y avoir des moyens de simplifier la formule mais il fait actuellement trop chaud pour chercher

    Cordialement

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 32
    Points : 26
    Points
    26
    Par défaut
    Hello
    Idem j'ai bien le retour des ids de la table iinst
    Mais comme dit plus haut comment rédiger mon DELETE ?
    Merci à toi
    ++

    Citation Envoyé par Jon Shannow Voir le message
    Dans ce cas, pourrais-tu essayer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT une_autre_colonne, datetime(iinst.datetime) FROM iinst LIMIT 20
    Pour voir le résultat

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 32
    Points : 26
    Points
    26
    Par défaut
    Je fais cette syntaxe est ce que c'est OK ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DELETE FROM iinst WHERE (datetime(iinst.datetime))=29;

  16. #16
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 32
    Points : 26
    Points
    26
    Par défaut
    No good les enregistrements sont toujours la
    GRRRRR!!!!!

  17. #17
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 32
    Points : 26
    Points
    26
    Par défaut
    Bon j'ai tout repris à zéro
    En fait le '%e' ne me renvoie aucun enregistrement alors que "%d" fonctionne
    Voici ma requête finale qui supprime bien tous les enregistrements ayant le jour à 29 et il faut mettre 29 entre quotes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DELETE FROM iinst WHERE strftime('%d',date(datetime/1000,'unixepoch'))='29';
    Merci pour vos aides, je mets en résolu
    ++

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

Discussions similaires

  1. Grant delete avec condition de suppression
    Par samirCA007 dans le forum Administration
    Réponses: 4
    Dernier message: 08/11/2016, 14h54
  2. Réponses: 3
    Dernier message: 03/10/2011, 11h08
  3. [SQL Server 2005] Delete avec conditions
    Par dkmix dans le forum Développement
    Réponses: 6
    Dernier message: 24/01/2011, 17h36
  4. Erreur sur DELETE avec condition sur un DATETIME
    Par Luke58 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 25/08/2009, 12h00
  5. boucle avec condition d'arret changeante
    Par NicoH dans le forum Langage
    Réponses: 3
    Dernier message: 10/06/2003, 11h48

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