#1 Mon 17 September 2018 11:12
- V.LEONARD38
- Participant occasionnel
- Date d'inscription: 18 Jan 2016
- Messages: 18
QGIS: Réduire le nombre de caractère d'une colonne
Bonjour à tous,
ma demande est simple et je croyais m'en sortir avec les commandes Right ou Left des chaines de caractères de la calculatrice de champs, mais je me rend compte que ces commandes ne peuvent pas résoudre simplement ce problème.
J'ai une colonne où se trouve un code qui ressemble à ça :
54006-12
54006-28
54213-5
54213-360
54213-16
54122-2
54122-4236
Il faut que je récupère uniquement la partie du code à droite du tiret (12, 28, 5...) pour la mettre dans une autre colonne (actuellement vide).
Je pensais m'en sortir avec la commande 'Right' des chaines de caractères qui permet de ne conserver que la partie à droite d'une expression.
Si cette manipulation est possible, elle ne peut se faire que valeur unique par valeur unique, et non pas sur toute la colonne d'un coup...ce qui est parfaitement inutile puisque j'ai plusieurs centaines de valeurs uniques, autant tout retaper à la main.
Connaissez-vous un autre moyen pour supprimer la partie de gauche du code ou ne conserver que la partie de droite ?
En vous remerciant,
Valentin
Dernière modification par V.LEONARD38 (Mon 17 September 2018 11:13)
Hors ligne
#2 Mon 17 September 2018 11:20
- Kili555
- Participant actif
- Date d'inscription: 12 Feb 2018
- Messages: 50
Re: QGIS: Réduire le nombre de caractère d'une colonne
La commande substr de la calculatrice de champs irait bien je pense
Hors ligne
#3 Mon 17 September 2018 11:47
- V.LEONARD38
- Participant occasionnel
- Date d'inscription: 18 Jan 2016
- Messages: 18
Re: QGIS: Réduire le nombre de caractère d'une colonne
Merci Kili555,
je n'ai pas essayé cet outil, il me semble qu'il fonctionne également par valeur unique et non pas sur un ensemble de valeurs différentes.
Si j'utilise cette commande, il faudra faire :
substr('54006-12',0,6) → '12'
et répéter cette action pour chaque valeur différente :
substr('54006-28',0,6) → '28'
substr('54213-360',0,6) → '360'
ect...
Ou alors, il y a une méthode pour tout traiter d'un coup avec cette commande ?
Hors ligne
#4 Mon 17 September 2018 12:17
- p.jeremie
- Participant assidu
- Lieu: Valence
- Date d'inscription: 10 Sep 2017
- Messages: 427
Re: QGIS: Réduire le nombre de caractère d'une colonne
Si la partie de gauche est toujours sur 5 caractères, alors le calcul suivant suffit :
Code:
right("code",length("code")-6)
longueur du code, moins longueur de la partie fixe + 1 pour le tiret
exemple pour 54213-360
longueur 9
- (5 + 1)
= 3
--> right('54213-360', 3) renvoie bien 360
Si la partie de gauche a une longueur variable, il faut en plus se servir de strpos() pour connaitre la position du tiret :
Code:
right("code",length("code")-strpos("code", '-'))
le strpos() va renvoyer un entier qui donne la position du tiret dans la chaine
sur l'exemple avec 54213-360 il renverra 6
on retombe donc bien sur le 9 - 6 = 3 et
--> right('54213-360', 3) renvoie bien 360
Hors ligne
#5 Mon 17 September 2018 12:22
- loic58471
- Participant occasionnel
- Date d'inscription: 29 Sep 2017
- Messages: 38
Re: QGIS: Réduire le nombre de caractère d'une colonne
Bonjour,
non cet outil s'applique comme tous les autres sur la table entière si tant est que l'option "ne mettre à jour que les n entités sélectionnées" soit décochées.
Et lisez bien la notice de la fonction, vos paramètres seront
- le nom de votre colonne entre guillemet (et non une entrée particulière comme dans votre exemple)
- l'indice du caractère de début d'extraction sachant que le premier caractère a l'indice 1; dans votre cas ce sera donc 7 si le premier nombre à gauche a toujours la même longueur (6 chiffres plus le tiret)
- le nombre de caractère à extraire, ici "qui peut le plus peut le moins"mettez donc au plus grand, 10 ou 100 devrait convenir
Hors ligne
#6 Mon 17 September 2018 15:56
- V.LEONARD38
- Participant occasionnel
- Date d'inscription: 18 Jan 2016
- Messages: 18
Re: QGIS: Réduire le nombre de caractère d'une colonne
Sympa l'astuce, p.jeremie, je pense que strpos est une commande qui va bien me servir.
Problème résolu du coup. Merci pour vos réponses.
Hors ligne