Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Suite à un problème technique intervenu entre le 22 et le 23 mars, nous avons du procéder dans la soirée du 25 mars, à la restauration de la base de données du 24 mars (matinée).

En clair, nous avons perdu vos contributions et inscriptions du dimanche 24 et du lundi 25 mars.
Nous vous prions de nous excuser.

#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! smile

Hors ligne

 

#2 Tue 30 May 2017 18:28

Nicolas Ribot
Membre
Lieu: Toulouse
Date d'inscription: 9 Sep 2005
Messages: 1534

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

 

Pied de page des forums

Powered by FluxBB