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 :

Enlever les caractères non A-Z 0-9 d'une chaine


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Lucas Panny
    Invité(e)
    Par défaut Enlever les caractères non A-Z 0-9 d'une chaine
    Bonjour,

    Il s'agit de créer un nom table (et ultérieurement une table) à préfixe fixe de 13 caractères, on a donc à lui concaténer une chaine qui ne doit donc pas dépasser 17 caractères (13 + 17 = 30, la limite conventionnelle)
    Mais le problème c'est que cette suffixe additionnelle est obtenue à partir d'une chaine qui peut-être plus longue, contenant espace et accents:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE OR REPLACE FUNCTION WITHOUT_FORMAT_STR(varchar2 v_ClassStr)
    RETURN varchar2
    BEGIN
    	--return SUBSTR(v_ClassStr, 1, 17);
    END;
    Comment alors parcourir chaque caractère d'une chaine en Oracle Sql pour lui enlever les espaces et accentuations (ainsi que cédille, etc.)?

  2. #2
    Scorpi0
    Invité(e)
    Par défaut
    Salut,

    Si tu es en 10g+, tu peux aller faire un tour du côté des expressions régulières (une petite recherche google avec 'REGEXP + ORACLE' devrait t'aider, par exemple http://www.adp-gmbh.ch/blog/2005/december/22.html).

    Sinon en 10g-, obliger de faire du cas par cas je crois bien.

    Par contre t'aurais du poster dans la section PL/SQL...

  3. #3
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    Vous pourriez vous inspirer d'un algo de ce type:

    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
    Connecté à :
    Oracle9i Enterprise Edition Release 9.2.0.5.0 - 64bit Productio
    With the Partitioning, OLAP and Oracle Data Mining options
    JServer Release 9.2.0.5.0 - Production
     
    SQL> set serveroutput on
    SQL> 
    SQL> DECLARE
      2    LC$Ko   VARCHAR2(100) := 'éèàçù0123456789,;:!§/.?&_%ù¨^/*-+&"''(-_)={[|`\^@]}';
      3    LC$Ok   VARCHAR2(100) := 'eeacu';
      4    LC$Res VARCHAR2(100);
      5  BEGIN
      6    LC$Res := TRANSLATE('123acfgtàé23',LC$Ko ,LC$Ok);
      7    DBMS_OUTPUT.PUT_LINE(lc$res);
      8  END;
      9  
     10  
     11  /
    acfgtae
     
    Procédure PL/SQL terminée avec succès.
     
    SQL>
    A l'avenir, merci d'indiquer systématiquement les versions utilisées

  4. #4
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Si c'est pour supprimer (et pas remplacer) les caractères comme dit dans le titre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT t.chaine, TRANSLATE(t.chaine, 
    'a'|| TRANSLATE(t.chaine, '!ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789', '!'), 'a') as result
    FROM
    	(SELECT '123acfgtàé23' AS chaine FROM dual) T
     
    Chaine              result
    123acfgtàé23     123acfgt23

  5. #5
    Lucas Panny
    Invité(e)
    Par défaut
    Je suis sous ORACLE 9i

    Le code de McM c'est ce que j'avais pensé et voici son utilisation dans ma fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE OR REPLACE FUNCTION WITHOUT_FORMAT_STR(v_ClassStr varchar2)
    RETURN varchar2
    AS
    v_Str varchar2(1000);
    BEGIN
      v_Str := TRANSLATE(v_ClassStr, 
    'a'|| TRANSLATE(v_ClassStr, 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_', ' '), 'a');
    	return UPPER(SUBSTR(v_Str, 1, 17));
    END;
    Mais après analyse, c'est pas très ergono! En fait, ce que je cherche donc c'est remplacer mais pas supprimer (enlever)

  6. #6
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    remplacer par quoi ? (Voyez ma solution)

Discussions similaires

  1. [PL/SQL] Supprimer les caractères non numériques
    Par Oliveuh dans le forum PL/SQL
    Réponses: 6
    Dernier message: 25/06/2015, 13h13
  2. enlever les caractères non numériques
    Par Issam dans le forum SQL
    Réponses: 2
    Dernier message: 06/02/2015, 17h07
  3. Enlever les caractères de bourrages
    Par boux2 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 11/07/2006, 13h07
  4. [C#][ADO] Enlever les caractère spéciaux
    Par Oberown dans le forum Windows Forms
    Réponses: 3
    Dernier message: 10/01/2005, 19h38

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