Ajouter un zéros aux numéros de tome d'une série
dans Requêtes SQL
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))
(CADDIE(NOTI))
En vous remerciant par avance !
Connectez-vous ou Inscrivez-vous pour répondre.
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
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