IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes PostgreSQL Discussion :

Créer un ID avec des bribes de colonne [9.3]


Sujet :

Requêtes PostgreSQL

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Février 2015
    Messages : 12
    Points : 5
    Points
    5
    Par défaut Créer un ID avec des bribes de colonne
    Bien le bonjour,

    J'aimerais créer un ID avec des morceaux d'infos de plusieurs colonnes dans une même table :

    ID = les 3 premiers chiffres de C1 || la ou les lettres présentes dans C2 || et les 4 derniers de C2 sans le ou les zéros du début.

    C2 peut avoir ces formes-là : 000XX0000 / 000X0000 / XX0000 / X0000 les X représentent bien sûr des lettres et 0 des chiffres.

    Donc j'ai commencé par ajouter une colonne ID

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ALTER TABLE meddi2014_62temp
    ADD "ID" character varying(11)
    Pour ensuite lui rajouter les infos

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    UPDATE MaTable set "ID" =(
    CASE
    WHEN "C2" ~~ '%[a-z][a-z]%'
    THEN LEFT("C1",3) || LEFT(RIGHT("C2",6),2) || TRIM(LEADING '0' FROM (RIGHT("C2",4)))
    WHEN "C2" ~~ '%[a-z]%'
    THEN LEFT("C1",3) || LEFT(RIGHT("C2",5),1) || TRIM(LEADING '0' FROM (RIGHT("C2",4)))
    WHEN "C2" ~~ '[a-z][a-z]%'
    THEN LEFT("C1",3) || LEFT("C2",2) || TRIM(LEADING '0' FROM (RIGHT("C2",4)))
    WHEN "C2" ~~ '[a-z]%'
    THEN LEFT("C1",3) || LEFT("C2",1) || TRIM(LEADING '0' FROM (RIGHT("C2",4)))
    ELSE ''
    END
    Et enfin transformer ID en PRIMARY KEY.

    Je ne sais pas si c'est la bonne méthode, mais je sais que mon code ne marche pas ;p

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Il manque le END à la fin du CASE.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Février 2015
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Oui... il est bien présent dans mon code, un oubli d'inattention.

    En fait, le code par lui-même fonctionne quand je retire les TRIM(LEADING).

    Mais me renvoie comme résultat toujours le ' ' du ELSE.

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Février 2015
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Bon ben j'ai trouvé ;p

    Comme je me plantais dans les WHEN "C2" ~~ '%[a-z][a-z]%', vus les résultats, j'ai changé les conditions avec LENGTH ce qui donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    UPDATE MaTable set "ID" =(
    CASE
    WHEN WHEN LENGTH("C2") = 9
    THEN LEFT("C1",3) || LEFT(RIGHT("C2",6),2) || TRIM(LEADING '0' FROM (RIGHT("C2",4)))
    WHEN WHEN LENGTH("C2") = 8
    THEN LEFT("C1",3) || LEFT(RIGHT("C2",5),1) || TRIM(LEADING '0' FROM (RIGHT("C2",4)))
    WHEN WHEN LENGTH("C2") = 6
    THEN LEFT("C1",3) || LEFT("C2",2) || TRIM(LEADING '0' FROM (RIGHT("C2",4)))
    WHEN WHEN LENGTH("C2") = 5
    THEN LEFT("C1",3) || LEFT("C2",1) || TRIM(LEADING '0' FROM (RIGHT("C2",4)))
    ELSE ''
    END
    Car le nombre de caractères est forcement un des 4.

  5. #5
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    J'ose espérer que vous ne faites pas ça pour en faire la clé primaire de la table ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Février 2015
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    En fait, je n'ai pas eu besoin de faire la clé primaire ; je me suis servi de cette table comme temp. pour ré-imbriquer les données dans un tableau bien fait (car pas fait par moi!)

    À part le fait qu'il y aurait pu y avoir des redondances (qu'il n'y a pas), pourquoi ça n'aurait pas été une bonne ID_ ?

  7. #7
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Parce qu'il n'y a rien de mieux qu'un identifiant entier auto-incrémenté.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Février 2015
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Rien à redire

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Créer un histogramme avec des colonnes indépendantes
    Par michel42 dans le forum Powerpoint
    Réponses: 1
    Dernier message: 11/05/2012, 18h16
  2. [PPT-2003] créer un tableau avec des largeurs de colonnes différentes
    Par headachemaster dans le forum VBA PowerPoint
    Réponses: 7
    Dernier message: 29/12/2010, 22h19
  3. créer une table avec des colonnes de types différents
    Par d_hazem dans le forum Composants
    Réponses: 1
    Dernier message: 15/01/2009, 15h23
  4. [JTable] Créer une JTable vide avec des noms de colonnes.
    Par Cyborg289 dans le forum Composants
    Réponses: 2
    Dernier message: 27/09/2005, 15h54
  5. créer un noeuds avec des paramétres
    Par Toxine77 dans le forum XMLRAD
    Réponses: 5
    Dernier message: 21/01/2003, 16h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo