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 :

Aide oracle découper et ordonner chaine [11gR2]


Sujet :

SQL Oracle

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Octobre 2011
    Messages : 80
    Points : 56
    Points
    56
    Par défaut Aide oracle découper et ordonner chaine
    Bonjour,

    J'ai un soucis sur Oracle que je n'arrive pas à résoudre,

    En entré j'ai une chaine de longueur variable, composée de nombres sur 2 caractères par exemple : 45, 8978, 5487952145 (impossible d'avoir 45879 car 9 est un nombre que sur 1 caractère et non 2, il aurai fallu avoir 09)

    Donc voici ce que je cherche à réaliser :

    j'ai un nombre de longueur variable : 5487952145 je le découpe => 54-87-95-21-45

    et ensuite je le met dans un ordre croissant : 54-87-95-21-45 => 21-45-54-87-95

    et voila, si vous avez un début de solution je suis preneur car je ne vois pas du tout comment faire ceci :s

    Cordialement

  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
    Voici un début
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    WITH t AS (SELECT 1 num, '45' c FROM dual UNION SELECT 2, '8978' FROM dual UNION SELECT 3, '5487952145' FROM dual)
    SELECT num, EXTRACTVALUE(COLUMN_VALUE,'/x')
    FROM t, TABLE(XMLSEQUENCE(EXTRACT(XMLTYPE('<list>'||REGEXP_REPLACE(c, '(..)', '<x>\1</x>')||'</list>'), '/list/x')))
    ORDER BY 1, 2
     
    NUM	EXTRACTVALUE(COLUMN_VALUE,'/X')
    1	45
    2	78
    2	89
    3	21
    3	45
    3	54
    3	87
    3	95
    Reste à réaggréger avec listagg
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Octobre 2011
    Messages : 80
    Points : 56
    Points
    56
    Par défaut
    Trop fort merci beaucoup, ce qui me donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     select LISTAGG(val,'-') WITHIN GROUP (ORDER BY val) AS valeur from (
      WITH t AS (SELECT '5487952145' valeur FROM dual)
      SELECT EXTRACTVALUE(COLUMN_VALUE,'/x') as val
      FROM t, TABLE(XMLSEQUENCE(EXTRACT(XMLTYPE('<list><x>'||REGEXP_REPLACE(valeur, '(..)', '\1</x><x>')||'</x></list>'), '/list/x')))
      order by val asc
      )where VAL != '(null)';

    il y a juste le '(null)' je sais pas si c'est super

    Merci encore

  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
    La table T c'est pour se donner un jeu d'essai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    WITH t AS (SELECT 1 num, '45' c FROM dual UNION SELECT 2, '8978' FROM dual UNION SELECT 3, '5487952145' FROM dual)
    SELECT num, listagg(EXTRACTVALUE(COLUMN_VALUE,'/x'), '-') WITHIN GROUP (ORDER BY EXTRACTVALUE(COLUMN_VALUE,'/x')) chaine --, EXTRACTVALUE(COLUMN_VALUE,'/x') code
    FROM t, TABLE(XMLSEQUENCE(EXTRACT(XMLTYPE('<list>'||REGEXP_REPLACE(c, '(..)', '<x>\1</x>')||'</list>'), '/list/x')))
    GROUP BY num
    Tu peux faire directement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT listagg(EXTRACTVALUE(COLUMN_VALUE,'/x'), '-') WITHIN GROUP (ORDER BY EXTRACTVALUE(COLUMN_VALUE,'/x')) chaine
    FROM TABLE(XMLSEQUENCE(EXTRACT(XMLTYPE('<list>'||REGEXP_REPLACE('5487952145', '(..)', '<x>\1</x>')||'</list>'), '/list/x')))
     
    CHAINE
    21-45-54-87-95
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Octobre 2011
    Messages : 80
    Points : 56
    Points
    56
    Par défaut
    Très impressionnant, je crois que je vais me mettre aux expressions régulière, merci encore

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

Discussions similaires

  1. Aide sur une selection de chaine de char avec une souris
    Par Baharroth dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 15/11/2006, 21h17
  2. dbms_sql.execute : code retour & aide oracle
    Par macben dans le forum Oracle
    Réponses: 5
    Dernier message: 07/04/2006, 10h02
  3. aide oracle forms et reports
    Par aida2 dans le forum Reports
    Réponses: 2
    Dernier message: 05/10/2005, 01h23
  4. découper un champ (chaine)+(nombre)
    Par r-zo dans le forum Langage SQL
    Réponses: 10
    Dernier message: 28/08/2003, 12h32

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