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

PL/SQL Oracle Discussion :

Remplacer une partie d'une chaine par un caractere ou une sous_chaine


Sujet :

PL/SQL Oracle

  1. #1
    Membre du Club
    Inscrit en
    Juin 2005
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 139
    Points : 59
    Points
    59
    Par défaut Remplacer une partie d'une chaine par un caractere ou une sous_chaine
    Bonjour,

    J'ai une chaine qui ressemble à ceci : modele10500_maTable
    Je veux pour chaque requête remplacer les deux zero par le caractere %
    donc pour avoir ça à la fin modele105%_maTable
    la requete qui s'approche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT 'modele10500_maTable', SUBSTR('modele10500_maTable',INSTR('modele10500_maTable' ,'_')) from dual;
    ce que j'essaye de faire est reperer la position du caractere _, ensuite je voudrai a partir de sa position reculer de deux caractères mais je n'arrive pas.


    Merci

  2. #2
    McM
    McM est déconnecté
    Expert éminent

    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
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Je n'avais pas lu la dernière phrase.. je corrige

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT a, CASE WHEN SUBSTR(a, INSTR(a, '_') -2, 2) = '00' THEN SUBSTR(a, 1, INSTR(a, '_') - 3) ||'%'|| SUBSTR(a, INSTR(a, '_'))
    ELSE a
     END rempl
    FROM (SELECT 'modele10500_maTable' a FROM dual
    UNION SELECT 'modele1050_maTable' a FROM dual
    UNION SELECT 'modele100500_maTable' a FROM dual
    )
     
    A	REMPL
    modele100500_maTable	modele1005%_maTable
    modele10500_maTable	modele105%_maTable
    modele1050_maTable	modele1050_maTable

  3. #3
    Membre du Club
    Inscrit en
    Juin 2005
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 139
    Points : 59
    Points
    59
    Par défaut
    Merci MCM,

    Juste une question.
    Mon cas c'est pas forcement deux 00, ça peut etre 01, ou 10 ou 99 ou n'importe.
    en gros 2 caracteres avant le caractere (_).
    Merci

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

    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
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SUBSTR(a, 1, INSTR(a, '_') - 3) ||'%'|| SUBSTR(a, INSTR(a, '_'))

  5. #5
    Membre du Club
    Inscrit en
    Juin 2005
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 139
    Points : 59
    Points
    59
    Par défaut
    Merci beaucoup.
    Je teste et je te dis ça.

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 388
    Points
    18 388
    Par défaut
    Vous pouvez utiliser une expression régulière, mais ce sera moins performant que la solution de McM (les regexp sont coûteuses en CPU) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select regexp_replace(a, '.._', '%_')

  7. #7
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 894
    Points : 6 648
    Points
    6 648
    Par défaut
    Est-ce que les deux caractères doivent être des chiffres?

  8. #8
    Membre du Club
    Inscrit en
    Juin 2005
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 139
    Points : 59
    Points
    59
    Par défaut
    Bonjour,

    Oui les deux caractères sont forcement des chiffres.

    Merci

Discussions similaires

  1. Remplacer une partie d'un mot par une autre
    Par darkman19320 dans le forum Linux
    Réponses: 3
    Dernier message: 22/06/2012, 10h47
  2. [XSLT 2.0] Remplacer le début de la chaine par une autre
    Par cris83500 dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 19/04/2011, 11h26
  3. Remplacer une partie de l'image par 0
    Par code_source dans le forum Images
    Réponses: 2
    Dernier message: 11/01/2011, 16h11
  4. [MySQL] recuperer une partie de la chaine récupérée aprés d'aprés une requête MySQL
    Par bourbita.thameur dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 02/06/2009, 13h15
  5. Réponses: 1
    Dernier message: 24/05/2007, 21h20

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