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 :

Trouver une chaîne de caractères


Sujet :

PL/SQL Oracle

  1. #21
    Nouveau membre du Club
    Inscrit en
    Décembre 2006
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 109
    Points : 35
    Points
    35
    Par défaut
    merci laurentschneider
    j'ai mis le code comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    WITH t AS 
    (SELECT value(n) x FROM TABLE(sys.odcivarchar2list(
      'xxxxx/1','xxxxx/2','yyyy/1','yyyy/1','REF67887/3' , 'REF67823/3','REF67899/3'))n)
    SELECT x, 
      regexp_substr(x,'\w+/')||  
      (regexp_substr(x,'\w+',1,2)+
        row_number() over (partition BY regexp_substr(x,'\w+',1,2) ORDER BY 1)-1 ) x2 
    FROM t;
    mais il m'a donné l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ORA-01722 : Nombre non valide



    et si je veux selectionner mes donneés d'une table au lieu d'utiliser ((sys.odcivarchar2list(
    'xxxxx/1','xxxxx/2','yyyy/1','yyyy/1','REF67887/3' , 'REF67823/3','REF67899/3')
    comment faire?
    Ne pensez pas trop

  2. #22
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    1) quelle version ?

    2) enlève la clause WITH

  3. #23
    Membre expérimenté Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Points : 1 738
    Points
    1 738
    Par défaut
    Requete infecte ou vous concatenez des types de données differents (en l'occurence des caracteres avec du numérique) avec un operateur +
    Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac)

  4. #24
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    Ne soit pas trop académique avec tes datatypes, il est tout à fait courant d'avoir des systèmes qui livrent des numéros de références ABC/1234 et de récupérer les valeurs ABC et 1234...




    [EDIT]après de savoir si il vaut mieux faire du cast implicite (TO_NUMBER) ou explicite (+), c'est une question de religion [/EDIT]

    [EDIT2]ma religion m'interdit de taper plus de caractères que nécessaire [/EDIT2]

  5. #25
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    pour être sûr qu'on ait des chiffres à la fin, employons donc \d

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT x, 
       regexp_substr(x,'\w+/')||  
        (regexp_substr(x,'\d+$')+
          row_number() over (partition BY regexp_substr(x,'\d+$') ORDER BY 1)-1 )
      X2
    FROM t;

  6. #26
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Pour quoi utiliser des expressions régulières là où instr/substr suffisent ?

  7. #27
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    pour des raisons de lisibilite et de flexibilite, mais INSTR et SUBSTR sont en general plus performants

  8. #28
    Nouveau membre du Club
    Inscrit en
    Décembre 2006
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 109
    Points : 35
    Points
    35
    Par défaut
    Merci beaucoup j'ai résolu le problème avec un to_char
    Alors, et si je veux utiliser les données d'une table. c'est à dire utiliser
    select ref from matable au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    (SELECT value(n) x FROM TABLE(sys.odcivarchar2list(
      'xxxxx/1','xxxxx/2','yyyy/1','yyyy/1','REF67887/3' , 'REF67823/3','REF67899/3'))n)
    comment faire ?
    Ne pensez pas trop

  9. #29
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT ref , 
       regexp_substr(ref ,'\w+/')||  
        (regexp_substr(ref ,'\d+$')+
          row_number() over (partition BY regexp_substr(ref ,'\d+$') ORDER BY 1)-1 )
      X2
    FROM matable ;
    c'est vraiment te mâcher le travail ça

  10. #30
    Nouveau membre du Club
    Inscrit en
    Décembre 2006
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 109
    Points : 35
    Points
    35
    Par défaut
    Je vous remercie tous pour votre aide, ça marcher nickel
    Ne pensez pas trop

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Réponses: 8
    Dernier message: 31/05/2020, 19h18
  2. Réponses: 8
    Dernier message: 12/02/2013, 01h08
  3. Réponses: 2
    Dernier message: 16/09/2010, 18h29
  4. Inverser une chaîne de caractères
    Par DBBB dans le forum Assembleur
    Réponses: 2
    Dernier message: 30/03/2003, 11h09
  5. Réponses: 3
    Dernier message: 09/05/2002, 01h39

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