Conversion d'une chaine avec une lettre en entier

ThEBiShOp Messages postés 9307 Date d'inscription   Statut Contributeur Dernière intervention   -  
ThEBiShOp Messages postés 9307 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

j'aimerais convertir une chaine qui contient en caractère en plein milieu en une chaine numérique, mais en convertissant la lettre en entier par son index alphabétique.

Par exemple j'aimerais que cette chaine : 12345A9876 me donne : 1234519876

J'ai essayé quelques trucs, notamment avec la fonction conv() mais je n'arrive pas à obtenir ce que je veux...

Merci à ceux qui pourront m'éclairer ^^

5 réponses

  1. Utilisateur anonyme
     
    Je ne connais rien du tout aux procédures stockées, mais j'aurais été tenté d'écrire à la place de ta ribambelle de IF ELSEIF :
    SELECT ASCII(carac)-ASCII('@') INTO num
    2
    1. ThEBiShOp Messages postés 9307 Date d'inscription   Statut Contributeur Dernière intervention   1 606
       
      Han, génial, merci beaucoup ^^
      0
    2. Utilisateur anonyme
       
      De rien : )
      C'est rare de te voir du côté "demandeur"
      0
    3. ThEBiShOp Messages postés 9307 Date d'inscription   Statut Contributeur Dernière intervention   1 606
       
      ça arrive, et c'est sûrement pas la dernière fois ^^

      Merci en tout cas ;)
      0
  2. Utilisateur anonyme
     
    Bonjour

    Le format est-il toujours 5 chiffres - une lettre - 4 chiffres ou plus varié que ça ?
    Veux-tu le faire uniquement en SQL ou as-tu la possibilité de traiter la donnée extraite avec un autre langage (au hasard : PHP) ?
    0
  3. aujourdui
     
    Salut,
    Peut être en mélangeant avec substring() et char()?
    Aïe ça fait mal à la tête vu les peu de tests conditionnels possible...

    J'imagine que vous ne pouvez pas utiliser une fonction php pour remplacer l'enregistrement?
    0
  4. ThEBiShOp Messages postés 9307 Date d'inscription   Statut Contributeur Dernière intervention   1 606
     
    L'idée c'est de mettre en place un trigger.

    J'importe des données en bloc via un LOAD XML local INFILE INTO TABLE
    Donc pas de traitement ligne à ligne, c'est pour ça que le trigger est plus adapté (de mon point de vue).

    Le format est normalement fixe jusqu'à la lettre, j'ai commencé à faire un substring suivi d'un if else if pour vérifier toutes les lettres de l'alphabet, mais c'est un peu pachydermique comme méthode !!
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. ThEBiShOp Messages postés 9307 Date d'inscription   Statut Contributeur Dernière intervention   1 606
     
    Du coup je me suis fait une procédure stockée qui donne ça :

    DELIMITER $$

    CREATE DEFINER='root'@'%' PROCEDURE 'createClePersonne'(IN str VARCHAR(20))
    BEGIN
    DECLARE carac CHAR(10);
    DECLARE num TINYINT(1);

    SELECT SUBSTRING(str, 8, 1) INTO carac;

    IF carac = 'A' THEN
    SELECT 1 INTO num;
    ELSEIF carac = 'B' THEN
    SELECT 2 INTO num;
    ELSEIF carac = 'C' THEN
    SELECT 3 INTO num;
    ELSEIF carac = 'D' THEN
    SELECT 4 INTO num;
    ELSEIF carac = 'E' THEN
    SELECT 5 INTO num;
    ELSEIF carac = 'F' THEN
    SELECT 6 INTO num;
    ELSEIF carac = 'G' THEN
    SELECT 7 INTO num;
    ELSEIF carac = 'H' THEN
    SELECT 8 INTO num;
    ELSEIF carac = 'I' THEN
    SELECT 9 INTO num;
    ELSEIF carac = 'J' THEN
    SELECT 10 INTO num;
    ELSEIF carac = 'K' THEN
    SELECT 11 INTO num;
    ELSEIF carac = 'L' THEN
    SELECT 12 INTO num;
    ELSEIF carac = 'M' THEN
    SELECT 13 INTO num;
    ELSEIF carac = 'N' THEN
    SELECT 14 INTO num;
    ELSEIF carac = 'O' THEN
    SELECT 15 INTO num;
    ELSEIF carac = 'P' THEN
    SELECT 16 INTO num;
    ELSEIF carac = 'Q' THEN
    SELECT 17 INTO num;
    ELSEIF carac = 'R' THEN
    SELECT 18 INTO num;
    ELSEIF carac = 'S' THEN
    SELECT 19 INTO num;
    ELSEIF carac = 'T' THEN
    SELECT 20 INTO num;
    ELSEIF carac = 'U' THEN
    SELECT 21 INTO num;
    ELSEIF carac = 'V' THEN
    SELECT 22 INTO num;
    ELSEIF carac = 'W' THEN
    SELECT 23 INTO num;
    ELSEIF carac = 'X' THEN
    SELECT 24 INTO num;
    ELSEIF carac = 'Y' THEN
    SELECT 25 INTO num;
    ELSEIF carac = 'Z' THEN
    SELECT 26 INTO num;
    END IF;

    SELECT CONCAT(SUBSTRING(str, 1, 7), num, SUBSTRING(str, 9));
    END

    Si quelqu'un a moins bourrin, je prends, faute de mieux, je vais garder ça ^^
    0