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 :

Incrémenter des nombres dans une chaîne


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de shaun_the_sheep
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2004
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 619
    Par défaut Incrémenter des nombres dans une chaîne
    Bonjour,

    J'ai une chaîne de caractère composée de texte et chiffres exemple :
    Programme 2011 diplômée 2013.

    J'aimerai obtenir :
    Programme 2012 diplômée 2014.

    soit incrémenter de 1 tous les nombres de ma chaine.

    Quelqu'un a t'il une idée ?
    Merci par avance de l'aide que vous pourriez m’apporter.

  2. #2
    Membre Expert Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Par défaut
    Bonjour,

    Dans quel contexte voulez-vous faire ça ?

  3. #3
    Membre éprouvé Avatar de shaun_the_sheep
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2004
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 619
    Par défaut
    Dans une requete SQL en vue de faire un insert.

  4. #4
    Membre Expert Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Par défaut
    Citation Envoyé par shaun_the_sheep Voir le message
    Dans une requete SQL en vue de faire un insert.
    Si c'est un insert unique alors la solution décrite par Arkhena est celle que je mettrais en place.

    Si c'est plusieurs insert il vaut mieux passer par une procédure stockée.

    Après niveau conception c'est moyen, le mieux serait d'avoir juste les nombres stockés en base et reconstitué la phrase lors du select.

  5. #5
    Membre émérite Avatar de Arkhena
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 552
    Par défaut
    Bonjour,

    Ma solution n'est certainement pas la plus élégante mais voilà ce que je ferai :
    - une regexp pour récupérer les chiffres
    - un cast pour avoir un nombre
    - l'incrément du nombre

    Pour les expressions régulières :
    http://docs.oracle.com/cd/E11882_01/...0.htm#i1239858
    Pour le cast :
    http://docs.oracle.com/cd/E11882_01/...211.htm#i79512

    Cordialement,

    Arkhena

  6. #6
    Membre éprouvé Avatar de shaun_the_sheep
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2004
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 619
    Par défaut
    L'idée de l’expression régulière est bonne ... mais ma chaine peut comporter deux chiffres ....

  7. #7
    Membre Expert Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Par défaut
    Le fait qu'il y ai deux nombres de pose pas de problème quand à l'utilisation des expressions régulières.

    Je suppose que pour toi deux chiffres --> Programme 2011 diplômée 2013

    Si ce n'est pas le cas alors donne nous plus d'infos.

  8. #8
    Membre éprouvé Avatar de shaun_the_sheep
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2004
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 619
    Par défaut
    Oui c'est bien cela .... par contre je galere pour l'expression reguliere ...

  9. #9
    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
    Juste pour le plaisir
    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
    24
    25
    26
    27
    SELECT txt, 
    	RTRIM(CASE WHEN ch0 IS NOT NULL AND LTRIM(ch0, '0123456789') IS NULL THEN TO_CHAR(TO_NUMBER(ch0)+1) ELSE ch0 END
     	|| CASE WHEN ch1 IS NOT NULL AND LTRIM(ch1, '0123456789') IS NULL THEN ' '|| TO_CHAR(TO_NUMBER(ch1)+1) ELSE ' '|| ch1 END
     	|| CASE WHEN ch2 IS NOT NULL AND LTRIM(ch2, '0123456789') IS NULL THEN ' '|| TO_CHAR(TO_NUMBER(ch2)+1) ELSE ' '|| ch2 END
      ||CASE WHEN ch3 IS NOT NULL AND LTRIM(ch3, '0123456789') IS NULL THEN ' '|| TO_CHAR(TO_NUMBER(ch3)+1) ELSE ' '|| ch3 END
      || CASE WHEN ch4 IS NOT NULL AND LTRIM(ch4, '0123456789') IS NULL THEN ' '|| TO_CHAR(TO_NUMBER(ch4)+1) ELSE ' '|| ch4 END
      || CASE WHEN ch5 IS NOT NULL AND LTRIM(ch5, '0123456789') IS NULL THEN ' '|| TO_CHAR(TO_NUMBER(ch5)+1) ELSE ' '|| ch5 END)
      AS nouv
    FROM (
    	SELECT txt, row_number() OVER (PARTITION BY txt ORDER BY num) num,
    				lead(chaine, 0)  OVER (PARTITION BY txt ORDER BY num) ch0,
    				lead(chaine, 1)  OVER (PARTITION BY txt ORDER BY num) ch1,
    				lead(chaine, 2)  OVER (PARTITION BY txt ORDER BY num) ch2,
    				lead(chaine, 3)  OVER (PARTITION BY txt ORDER BY num) ch3,
    				lead(chaine, 4)  OVER (PARTITION BY txt ORDER BY num) ch4,
    				lead(chaine, 5)  OVER (PARTITION BY txt ORDER BY num) ch5
      FROM (
      SELECT ROWNUM num, txt,  EXTRACTVALUE(COLUMN_VALUE,'/x') AS chaine
            FROM (
    	 	SELECT 'Programme 2011 diplômée 2013' txt FROM dual
                 UNION ALL SELECT '13' txt FROM dual
                 UNION ALL SELECT 'département 13 Code postaux 13100 13001' txt FROM dual
                 ), 
              TABLE(XMLSEQUENCE(EXTRACT(XMLTYPE('<list><x>'||REPLACE(txt,' ','</x><x>')||'</x></list>'),
                '/list/x')))
      ))
    WHERE num = 1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    TXT	NOUV
    13	14
    Programme 2011 diplômée 2013	Programme 2012 diplômée 2014
    département 13 Code postaux 13100 13001	département 14 Code postaux 13101 13002
    Il y a bien sur des restrictions : un nombre doit être séparé des autres caractères par un espace, la chaine ne peut contenir &, etc..

  10. #10
    Membre éprouvé Avatar de shaun_the_sheep
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2004
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 619
    Par défaut
    merci ... j'essaie cela et désolé pour l'inversion nombre / chiffres .....

  11. #11
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 136
    Par défaut
    Citation Envoyé par shaun_the_sheep Voir le message
    L'idée de l’expression régulière est bonne ... mais ma chaine peut comporter deux chiffres ....
    Petit point de vocabulaire

    Un chiffre, c'est un caractère compris entre 0 et 9. Il n'a pas de valeur, tout comme une lettre.

    Un nombre, c'est une chaîne composée uniquement de chiffres (au moins un), comme un mot est composé de lettres. Il représente une quantité et on peut faire des calculs avec.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

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

Discussions similaires

  1. Réponses: 21
    Dernier message: 19/09/2011, 13h57
  2. Réponses: 2
    Dernier message: 12/04/2007, 17h12
  3. Réponses: 5
    Dernier message: 02/04/2007, 14h46
  4. [Free Pascal] Suppression des espaces dans une chaîne
    Par Maxence45 dans le forum Free Pascal
    Réponses: 43
    Dernier message: 18/03/2007, 11h29
  5. [MySQL] Récupérer un nombre dans une chaîne
    Par Phenol dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 04/03/2007, 21h28

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