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 :

Découpage chaîne de caractère


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 Découpage chaîne de caractère
    Bonsoir,

    Je dois scinder en deux une chaîne de caractère sans couper les mots.
    Ma chaine d'origine a une longueur de 100. Et mes deux chaines pour le découpage 50.

    Quelqu'un a t'il une idée ?

  2. #2
    Expert confirmé 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
    Par défaut
    Cherchez le dernière espacé (ou autre séparateur des mots) avant le cinquantième caractère.

  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
    justement c'est la notion d'avant le 50 ieme que je ne sais pas gérer.

    Pour chercher je pense utiliser la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    INSTR(chaine,chaine_cherche,position)
    il y a une autre fonction ?

  4. #4
    Expert confirmé 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
    Par défaut
    Passez -50 dans position.

  5. #5
    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
    bonjour,

    j'ai essayé l'idée mais cela ne convient pas :

    voici un exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select length(SUBSTR('MA TRES LONGUE CHAINE DE CARACTERE A DECOUPER EN DEUX CHAINES DE CARACTERES',0,INSTR('MA TRES LONGUE CHAINE DE CARACTERE A DECOUPER EN DEUX CHAINES DE CARACTERES',' ',50))) from dual
    le résultat renvoyé est :
    MA TRES LONGUE CHAINE DE CARACTERE A DECOUPER EN DEUX
    correspondant à une longueur de 54. Donc au delà de la taille maximale de mes sous chaines.

    le résultat attendu serait plutot :
    MA TRES LONGUE CHAINE DE CARACTERE A DECOUPER EN
    correspondant à un découpage à 47 ... donc moins de 50.

    Merci pour votre aide

  6. #6
    Membre Expert
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2012
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2012
    Messages : 652
    Par défaut
    La réponse est au niveau du CHAIN_CUTDOWN mais j'y ai mis les étapes intermédiaires

    Le but étant de trouver l'espace qui se situe au niveau ou juste avant le 50ème caractère, d'où le fait de faire une recherche inversé (On part du 50ème caractère et on remonte la chaîne jusqu'au première espace)

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    VAR chaine varchar2(100);
    EXEC :chaine := 'MA TRES LONGUE CHAINE DE CARACTERE A DECOUPER EN DEUX CHAINES DE CARACTERES';
     
    SELECT	LENGTH(:chaine) AS LENGTH,
    	GREATEST(LENGTH(:chaine)-50,0) AS REVERSE_CUT,
    	REVERSE(:chaine) AS REVERSE_CHAIN,
    	INSTR(
    	  REVERSE(:chaine),
    	  ' ',
              GREATEST(LENGTH(:chaine)-50,0)
              ) AS SPACE_REVERSED_POSITION,
    	LENGTH(SUBSTR(
              :chaine,
              0,
              LENGTH(:chaine)-INSTR(REVERSE(:chaine),' ',GREATEST(LENGTH(:chaine)-50,0))
              )) AS LENGTH_CHAIN_CUTDOWN,
    	SUBSTR(
              :chaine,
              0,
              LENGTH(:chaine)-INSTR(REVERSE(:chaine),' ',GREATEST(LENGTH(:chaine)-50,0))
              ) AS CHAIN_CUTDOWN
    FROM	DUAL;
     
     
    LENGTH 
    ---------- 
            75
     
    REVERSE_CUT
    -----------
            25
     
    REVERSE_CHAIN
    --------------------------------------------------------------------------------
    SERETCARAC ED SENIAHC XUED NE REPUOCED A ERETCARAC ED ENIAHC EUGNOL SERT AM
     
    SPACE_REVERSED_POSITION 
    ----------------------- 
            27       
     
    LENGTH_CHAIN_CUTDOWN
    --------------------
            48
     
    CHAIN_CUTDOWN
    --------------------------------------------------------------------------------
    MA TRES LONGUE CHAINE DE CARACTERE A DECOUPER EN

  7. #7
    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
    Désolé je n'ai pas fait attention au moins devant la position ....
    c'est plus simple en faite .
    Citation Envoyé par mnitu Voir le message
    Passez -50 dans position.

  8. #8
    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
    Le -50 va te donner la plus grande chaine en deuxième partie.
    Pour l'avoir en première partie, il suffit de récupérer le dernier espace de la chaine tronquée à 50 car

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT  SUBSTR(chaine, 1, INSTR(SUBSTR(chaine,1,50), ' ', -1)) par1,
    	SUBSTR(chaine, INSTR(SUBSTR(chaine,1,50), ' ', -1)+1) par2
    FROM (SELECT 'MA TRES LONGUE CHAINE DE CARACTERE A DECOUPER EN DEUX CHAINES DE CARACTERES' AS chaine FROM dual)
     
    PAR1 : MA TRES LONGUE CHAINE DE CARACTERE A DECOUPER EN 
    PAR2 : DEUX CHAINES DE CARACTERES

  9. #9
    Membre Expert
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2012
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2012
    Messages : 652
    Par défaut
    J'ajoute la solution Ô combien plus simple de Mnitu

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    var chaine VARCHAR2(100);
    exec :chaine := 'MA TRES LONGUE CHAINE DE CARACTERE A DECOUPER EN DEUX CHAINES DE CARACTERES';
     
    SELECT 
      LENGTH(SUBSTR(:chaine,0,INSTR(:chaine,' ',50-LENGTH(:chaine)))) AS CUTDOWN_POSITION,
     SUBSTR(:chaine,0,INSTR(:chaine,' ',50-LENGTH(:chaine))) AS CHAIN_CUTDOWN
    FROM dual;
     
    CUTDOWN_POSITION CHAIN_CUTDOWN
    ---------------- --------------------------------------------------
                  49 MA TRES LONGUE CHAINE DE CARACTERE A DECOUPER EN

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

Discussions similaires

  1. [XL-2010] Découpage chaîne de caractère
    Par LG-69 dans le forum Excel
    Réponses: 9
    Dernier message: 24/02/2015, 16h55
  2. Problème découpage chaîne de caractère
    Par Mokujil dans le forum C
    Réponses: 3
    Dernier message: 03/06/2008, 12h03
  3. [oracle] Découpage chaîne de caractères
    Par macben dans le forum Langage SQL
    Réponses: 1
    Dernier message: 31/05/2007, 11h56
  4. Découpage d'une chaîne de caractères
    Par karinhalabi dans le forum Cobol
    Réponses: 1
    Dernier message: 11/04/2007, 16h22
  5. Découpage d'une chaîne de caractère
    Par turbo_chess dans le forum C
    Réponses: 1
    Dernier message: 01/04/2007, 12h17

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