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

Langage SQL Discussion :

Renommer les doublons dans une table


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Homme Profil pro
    Project manager
    Inscrit en
    Juin 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Project manager
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2013
    Messages : 11
    Points : 13
    Points
    13
    Par défaut Renommer les doublons dans une table
    Bonjour,

    Dans la cadre d'un projet, j'ai développé une fonction à fin de pouvoir tester sur un libellé dans une table et s'il existe je le rajoute un indice pour ne pas avoir de doublons.

    Exemple :
    j'insère "toto.txt" dans la table alors qu'il existe déjà. La fonction me retourne toto(1).txt

    Le problème qui me pose c'est comment j'insère l'indice "(1)" à l'intérieur de la chine "toto.txt" sachant que je ne dois pas toucher à la partie ".txt" (c'est une extension)

    Merci d'avance pour votre aide

  2. #2
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 029
    Points : 23 751
    Points
    23 751
    Par défaut
    Bonjour,

    Quel est le SGBD que vous utilisez ? Les fonctions sur chaînes de caractères diffèrent d'un SGBD à l'autre...
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  3. #3
    Membre à l'essai
    Homme Profil pro
    Project manager
    Inscrit en
    Juin 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Project manager
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2013
    Messages : 11
    Points : 13
    Points
    13
    Par défaut
    J'utilise MySQL

  4. #4
    Membre à l'essai
    Homme Profil pro
    Project manager
    Inscrit en
    Juin 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Project manager
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2013
    Messages : 11
    Points : 13
    Points
    13
    Par défaut
    En fait j'ai l'extension du fichier enregistré dans la table. Donc il suffit de remplacer l'extension dans le nom, ajouter l'indice
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    DELIMITER |
    DROP FUNCTION IF EXISTS generateName|
    CREATE FUNCTION generateName (val VARCHAR(100), ext VARCHAR(20)) RETURNS VARCHAR(100) 
    BEGIN
      DECLARE i INT;
      DECLARE loopval VARCHAR(100);
      DECLARE newvalcount VARCHAR(100);
      SET val = TRIM(val);
      SET loopval = '';
      SET i = 0;
      SET loopval = val;
      SET val = REPLACE(val, ext, '');
      txtexist: LOOP
      SET newvalcount = 0;
      SET newvalcount = (SELECT COUNT(pk_ged_docs) FROM ged_docs WHERE TRIM(doc_titre) LIKE TRIM(loopval));
      IF newvalcount = 0
      THEN LEAVE txtexist;
      END IF;
      SET i = i + 1;
     
      SET loopval = CONCAT_WS('', val, '(' , i,')');
      SET loopval = CONCAT(loopval, ext);
      END LOOP;
     
      RETURN loopval;
    END;
    |
     
    DELIMITER ;
    Il me reste juste un petit problème, lors de l'utilisation de la fonction REPLACE() dans le cas où j'ai l'extension dupliquer dans le nom du fichier.
    exemple :
    test.txt.txt

    => Après l'ajout de l'indice j'aurai text (1).txt

  5. #5
    Membre à l'essai
    Homme Profil pro
    Project manager
    Inscrit en
    Juin 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Project manager
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2013
    Messages : 11
    Points : 13
    Points
    13
    Par défaut
    Problème résolu


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    DELIMITER |
    DROP FUNCTION IF EXISTS generateName|
    CREATE FUNCTION generateName (val VARCHAR(100), ext VARCHAR(20)) RETURNS VARCHAR(100) 
    BEGIN
      DECLARE i INT;
      DECLARE loopval VARCHAR(100);
      DECLARE newvalcount VARCHAR(100);
      DECLARE val2 VARCHAR(100);
      SET val = TRIM(val);
      SET loopval = '';
      SET i = 0;
      SET loopval = val;
      SET val = SUBSTRING(val,1,INSTR(val, SUBSTRING_INDEX(val, '.', -1)) - 2);
      SET val2 = SUBSTRING(val,1,INSTR(val, SUBSTRING_INDEX(val, '(', -1)) - 2);
      IF val2 != '' THEN
      SET val = val2; 
      END IF; 
      txtexist: LOOP
      SET newvalcount = 0;
      SET newvalcount = (SELECT COUNT(pk_ged_docs) FROM ged_docs WHERE TRIM(doc_titre) LIKE TRIM(loopval));
      IF newvalcount = 0
      THEN LEAVE txtexist;
      END IF;
      SET i = i + 1;
     
      SET loopval = CONCAT_WS('', val, '(' , i,')');
      SET loopval = CONCAT(loopval, ext);
      END LOOP;
     
      RETURN loopval;
    END;
    |
     
    DELIMITER ;

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

Discussions similaires

  1. supprimer les doublons dans une table
    Par mavean dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 26/06/2019, 13h26
  2. Réponses: 10
    Dernier message: 23/11/2009, 22h49
  3. Supprimer les doublons dans une table
    Par lelectronique.com dans le forum Requêtes
    Réponses: 7
    Dernier message: 15/10/2008, 14h33
  4. Supprimer les doublons dans une table!
    Par Kirou dans le forum Requêtes
    Réponses: 3
    Dernier message: 03/06/2008, 15h37
  5. problème pour éviter les doublons dans une table
    Par bonnet85 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 19/02/2008, 04h35

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