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

SQL Oracle Discussion :

Utilisation de translate (?)


Sujet :

SQL Oracle

  1. #1
    LEK
    LEK est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    715
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 715
    Points : 470
    Points
    470
    Par défaut Utilisation de translate (?)
    Bonjour,
    je réalise (sous oracle 10g/win) une opération dans laquelle je dois récupérer un code numérique dans un champ. Le champ en question contient du varchar, pour le décrypter et récupérer la valeur numérique qui m'intéresse, j'utilise un masque stocké dans un autre champ.
    Voici comment fonctionne mon masque :
    le code 'A' correspond à une valeur alphanumérique ne faisant pas partie du code numérique que je dois récupérer.
    le code '#' correspond au code numérique que je dois récupérer.

    Par exemple si dans les champs v_mask et v_code j'ai ces valeurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     v_mask := 'AA########';
     v_code := 'Z814257890';
    J'aimerais récupérer le code 14257890 correspondant à la partie numérique suivant le masque.
    J'ai essayé d'utilisé la fonction translate pour ce faire mais je ne suis pas sûr que ce soit approprié...
    Quelqu'un aurait une idée ?

  2. #2
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Et si tu fais quelque chose comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SQL> select substr ('Z814257890', instr ('AA########', '#')) from dual;
    SUBSTR('
    --------
    14257890

  3. #3
    LEK
    LEK est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    715
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 715
    Points : 470
    Points
    470
    Par défaut
    Ce serait effectivement pas mal, mais potentiellement je peux avoir un code sous ce format : AA##A###AA

  4. #4
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    et pourquoi pas

  5. #5
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Citation Envoyé par LEK
    Ce serait effectivement pas mal, mais potentiellement je peux avoir un code sous ce format : AA##A###AA
    Dans ce cas autant créer ta propre fonction :
    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
    SQL> create or replace function f1 (p_code in varchar2, 
                                        p_mask in varchar2)
         return varchar2 is
      2    v_res varchar2(100);
      3  begin
      4    for i in 1..length (p_code) loop
      5      if substr(p_mask,i,1) = '#' then
      6         v_res := v_res || substr(p_code,i,1);
      7      end if;
      8    end loop;
      9    return v_res;
     10  end;
     11  /
    Function created.
     
    SQL> select f1('Z814257890','AA########') from dual;
    F1('Z814257890','AA########')
    ----------------------------------------------------
    14257890
     
    SQL> select f1('Z81425BB90','AA####AA##') from dual;
    F1('Z81425BB90','AA####AA##')
    ----------------------------------------------------
    142590

  6. #6
    LEK
    LEK est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    715
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 715
    Points : 470
    Points
    470
    Par défaut
    Effectivement ainsi cela fonctionne parfaitement. Merci plaineR
    C'est toujours par souci de trouver plus élégant que je me demandais si une solution par tranlate ou expression régulière ne faisait pas exactement cela de façon native... Mais cela dit, ton code répond parfaitement à mon besoin.

  7. #7
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Avec le translate, je ne pense pas que cela soit possible. Pas plus avec les expressions régulières car ton masque est particulier.

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

Discussions similaires

  1. [VxiR2] Problème export vers WebI, utilisation de translate/replace
    Par clementp dans le forum Deski
    Réponses: 1
    Dernier message: 26/11/2010, 16h57
  2. Utiliser Google Translate
    Par rambc dans le forum Général Python
    Réponses: 0
    Dernier message: 11/10/2010, 23h56
  3. Utilisation de Qt Translator
    Par Monta^^ dans le forum Qt
    Réponses: 15
    Dernier message: 12/05/2010, 11h21
  4. Réponses: 1
    Dernier message: 01/07/2009, 17h41
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

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