#1 Tue 30 May 2017 17:23
- bruhnild
- Participant actif
- Lieu: Lyon
- Date d'inscription: 7 Jun 2014
- Messages: 130
Séquence d'incrémentation [Postgres SQL]
Bonjour,
J'essaye de mettre à jour plusieurs ligne ayant la même incrémentation à 5 chiffres (modèle 00000), par exemple :
GL-CD413-00001_01
GL-CD413-00001_02
GL-CD413-00001_03
GL-CD413-00001_04
GL-CD413-00001_05
GL-CD413-00001_06
GL-CD413-00002_01
GL-CD413-00002_02
GL-CD413-00002_03
en :
GL-CD413-00033_01
GL-CD413-00033_02
GL-CD413-00033_03
GL-CD413-00033_04
GL-CD413-00033_05
GL-CD413-00033_06
GL-CD413-00034_01
GL-CD413-00034_02
GL-CD413-00034_03
J'ai essayé un requete comme ça
Code:
DROP SEQUENCE IF EXISTS covage.incrementation; CREATE SEQUENCE covage.incrementation INCREMENT 1 MINVALUE 0000 MAXVALUE 9999 START 33 CACHE 1; ALTER TABLE covage.incrementation OWNER TO postgres; CREATE OR REPLACE FUNCTION nextval_special() RETURNS TEXT LANGUAGE sql AS $$ SELECT to_char(nextval('covage.incrementation'), 'FM00000'); $$; UPDATE covage.cables_renommage SET codcb = concat('GL-CD320-',nextval_special(),'_',RIGHT(code_cb, 2));
GL-CD413-00033_01
GL-CD413-00034_02
GL-CD413-00035_03
GL-CD413-00036_04
GL-CD413-00037_05
GL-CD413-00038_06
GL-CD413-00039_01
GL-CD413-00040_02
GL-CD413-00041_03
mais le résultat ne correspond pas à mes attentes. L'incrémentation se pousuit de 1 en 1.
Pourriez vous m'aider?
Merci d'avance pour vos réponses!
Hors ligne
#2 Tue 30 May 2017 18:28
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1554
Re: Séquence d'incrémentation [Postgres SQL]
Bonsoir,
Peut etre plus simple qu'une séquence: convertir la partie à changer en nombre, ajouter 32, reconcaténer:
Changer éventuellement les left et right en fonction du pattern exact a changer.
Code:
with tmp as ( values ('GL-CD413-00001_01'), ('GL-CD413-00001_02'), ('GL-CD413-00001_03'), ('GL-CD413-00001_04'), ('GL-CD413-00001_05'), ('GL-CD413-00001_06'), ('GL-CD413-00002_01'), ('GL-CD413-00002_02'), ('GL-CD413-00002_03') ) SELECT column1, left(column1, 12) || (substring(column1, 13, 2)::int + 32)::text || right(column1, 3) FROM tmp;
Nicolas
Hors ligne
#3 Wed 31 May 2017 10:32
- bruhnild
- Participant actif
- Lieu: Lyon
- Date d'inscription: 7 Jun 2014
- Messages: 130
Re: Séquence d'incrémentation [Postgres SQL]
Merci pour votre réponse rapide,
La série de chiffre que j'ai donné n'était qu'un exemple. Je ne peux donc pas réécrire les valeurs telles quelles.
J'ai obtenu une réponse sur forumsig http://www.forumsig.org/showthread.php/ … post349180, qui correspond tout à fait à ce que je souhaite obtenir
Code:
UPDATE covage.cables_renommage SET codcb = substring(codcb from '(GL-.*-).*_.*') || right('00000' || CAST(substring(codcb from 'GL-.*-(.*)_.*') AS INTEGER) + 32, 5) || substring(codcb from 'GL-.*-.*(_.*)')
Merci encore pour la réponse.
Marine.
Hors ligne