Ajouter un zéros aux numéros de tome d'une série

Bonjour aux experts SQL,

Je suis novice/autodidacte en requête SQL, et je tente la procédure d'action suivante dans PMB afin d'ajouter un zéro aux tomes d'une série. Après quelques errements je n'ai plus de message d'erreur mais la requête n'agit pas sur les numéros de série. Sauriez-vous m'indiquer l'erreur (ou les erreurs) dans la requête suivante ?

UPDATE series SET serie_index = LPAD(serie_index, 2, '0') WHERE serie_id in
(CADDIE(NOTI))

En vous remerciant par avance !

Réponses

  • Bonjour

    Ceci devrait mieux marcher

    UPDATE notices SET tnvol=LPAD(tnvol, 2, '0') WHERE notice_id IN (CADDIE(NOTI))

    Le n° de série est celui de la notice dans la série, il est donc dans la table notices et il a pour nom tnvol (ce nom ne s'invente pas !)

    La liste des tables et leurs champs se trouve sur http://chez_moi/pmb/doc/noyau/ (URL à adapter selon l'installation)

    Bonne journée

     jean-luc


  • mars 2019 modifié
    Merci à vous 2.

    J'avais bien trouvé la liste des tables mais pas le bon nom... il y a aussi le schéma de la base de données qui est intéressant : http://chez_moi/pmb/doc/noyau/scheme.gif

    C'est incroyable car je sais a priori qu'Anne-Marie a déjà fait ce que je cherche, mais je ne le trouve pas lorsque j'en ai besoin....

    Pour info Anne-Marie rédige cette requête ainsi :

    UPDATE notices SET tnvol = CONCAT(\'0\', tnvol) WHERE tnvol*1<10 AND LEFT(tnvol,1) <> \'0\' AND notice_id in (CADDIE(NOTI))

    Auriez-vous l'amabilité d'en faire un commentaire de texte ?

    Bien cordialement




  • Bonjour

    Une petite remarque : Pour une bonne utilisation des requêtes d'Anne Marie il faut "Importer", bouton a droite de "Ajouter une procédure"  le fichier et non en extraire la sql car le texte du SQL est modifié pour pouvoir être importé.

    Ainsi dans votre cas du SQL il faut enlever les \ précédents les ' le 'bon sql est

    UPDATE notices SET tnvol = CONCAT('0', tnvol) WHERE tnvol*1<10 AND LEFT(tnvol,1) <> '0' AND notice_id in (CADDIE(NOTI))

    Comentaire

    le '0' est un texte alors que 0 est un nombre. tnvol contient un texte, si c'état un nombre il serait impossible d'y mettre '01'. Les comparaisons entre nombre et texte sont hasardeuses ainsi '0'<>0 à toutes les chances d'être vrai !

    CONCAT('0', tnvol) ajoute '0' a gauche de tnvol ainsi si tnvol = 1 le résultat est 01 et si tnvol est 99 le résultat est 099 si  tnvol = 01 le résultat est 001  (LPAD(tnvol, 2, '0') n'a pas ce pb).

    Pour éviter cet effet il faut s'assurer que tnvol est entre 1 et 9 et ne comporte pas de 0

    C'est ce que fait le WHERE : limiter le traitement aux notices qui ont un 'bon' tnvol

    -> tnvol*1<10 : le *1 (multiplier par 1, on pourrais aussi ajouter 0) est une astuce pour convertir un texte en nombre. on peut alors comparer 2 nombres

    -> LEFT(tnvol,1) <> '0'  :   le 1ér caractère à gauche n'est pas '0'

    En conclusion les 2 méthodes donnent le même résultat la première est plus simple


    J'espère avoir répondu a vos interrogations.

    Bonne journée

     jean-luc


Connectez-vous ou Inscrivez-vous pour répondre.