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 :

Insertion des slash entre les caractères d'une chaine


Sujet :

SQL Oracle

  1. #1
    Futur Membre du Club
    Inscrit en
    Août 2007
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 15
    Points : 9
    Points
    9
    Par défaut Insertion des slash entre les caractères d'une chaine
    Bonjour,

    je voulais faire une requête SQL sous Oracle qui me donne la chose suivante :

    bonjour ===>/b/o/n/j/o/u/r/

    est c'est possible sous Oracle?

    Merci.

  2. #2
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Salut !

    A partir de 10g,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SQL> SELECT regexp_replace('bonjour', '(.)', '\1/')
      2  FROM dual
      3  /
     
    REGEXP_REPLACE
    --------------
    b/o/n/j/o/u/r/
    Edit : plus vite que super-modo, mais moins bien lu l'énoncé... pas vu le premier slash

  3. #3
    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
    En 10g+ vous avez les expressions régulières :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select regexp_replace('bonjour', '(.)', '/\1') || '/' as mot
      from dual;
     
    MOT            
    ---------------
    /b/o/n/j/o/u/r/
    Edit : grillé par la boule jaune !

  4. #4
    Futur Membre du Club
    Inscrit en
    Août 2007
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 15
    Points : 9
    Points
    9
    Par défaut
    Merci pour vos reponses rapides,

    la mauvaise nouvelle c'est que je fonctionne sous Oracle 9.2i

    je ne sais pas est ce qu'il existe une solution sous cette version d'Oracle?

    Merci d'avance.

  5. #5
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Crée une fonction qui prend en paramètre ta chaîne, itère dessus pour ajouter les /, puis retourne le résultat.

    Sinon, si tu veux un truc dégueu et contre performant et en mode bug-using, tu as :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    WITH t AS (
    select 'bonjour' msg 
    from dual
    )
    select (select replace(replace(xmlagg(xmlelement("x", '/' || substr(t.msg, level, 1))), '</x>', ''), '<x>', '')
            from dual
            connect by level <= length(t.msg)) || '/'
    from t

  6. #6
    Futur Membre du Club
    Inscrit en
    Août 2007
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 15
    Points : 9
    Points
    9
    Par défaut
    Merci pacmann , oui je vois ....je suis victime de la version 9i d'Oracle, je suis pour créer une fonction propre qui gère ça (comme vous l'avez recommendé).

    pouvez-vous m'aider à créer cette fonction?

    thank's in adavnce.

  7. #7
    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
    Quelque chose comme ça :
    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
    CREATE OR REPLACE FUNCTION f_slash_string (p$_input in varchar2)
    RETURN varchar2 DETERMINISTIC
    IS
        v$_string    varchar2(100) default '/';
    BEGIN
        FOR i IN 1..length(p$_input)
        LOOP
          v$_string := v$_string || substr(p$_input, i , 1) || '/';
        END LOOP;
        RETURN (v$_string);  
    END f_slash_string;
    /
     
     
    select f_slash_string('bonjour') as slash
      from dual;
     
    SLASH          
    ---------------
    /b/o/n/j/o/u/r/
    Ou avec la méthode de Pacmann (légèrement modifiée, au lieu de concaténer le slash j'ai utilisé le replace de la balise ouvrante) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CREATE OR REPLACE FUNCTION f_slash_string (p$_input in varchar2)
    RETURN varchar2 DETERMINISTIC
    IS
        v$_string    varchar2(100);
    BEGIN
            SELECT REPLACE(REPLACE(xmlagg(xmlelement("x", substr(p$_input, level, 1))), '</x>', ''), '<x>', '/') || '/' INTO v$_string
              FROM dual
        CONNECT BY level <= length(p$_input);
        RETURN (v$_string);
    END f_slash_string;
    /

  8. #8
    Futur Membre du Club
    Inscrit en
    Août 2007
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 15
    Points : 9
    Points
    9
    Par défaut
    Merci Waldar,

    Votre fonction marche bien.

    Mon problème est résolu.

    Thank's.

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

Discussions similaires

  1. [AC-2007] Faire des liens entre les champs d'une table.
    Par maxime42 dans le forum Access
    Réponses: 3
    Dernier message: 26/04/2011, 22h23
  2. prendre un a un les caractères d'une chaine
    Par _MattU_ dans le forum VBA Access
    Réponses: 3
    Dernier message: 12/06/2008, 06h52
  3. [MySQL] Insertion des données avec les caractères spéciaux
    Par rachou59650 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 02/05/2008, 11h16
  4. Réponses: 5
    Dernier message: 02/01/2007, 14h57
  5. Réponses: 12
    Dernier message: 04/09/2006, 17h59

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