Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/04/2011, 15h42   #1
Membre à l'essai
 
Inscription : mai 2006
Messages : 67
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 67
Points : 21
Points : 21
Par défaut Extraction d'une chaîne

Bonjour

Je chercherais à extraire sur une colonne dans un ensemble de lignes.

j'ai une colonne qui contient la chaine suivante :
"[xxxxxxxxxxx] yyyyyy"
Et je souhaiterais extraire uniquement xxxxxxxxxxx.

Je voulais passé par un substring mais la longueur de xxxxxxxxxxx est variable.

Auriez-vous une idée à me proposer?

Merci pour votre aide.
Shixz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/04/2011, 15h54   #2
Membre émérite
 
Homme Olivier Dehorter
Ingenieur de recherche - Ecologue
Inscription : juin 2003
Messages : 697
Détails du profil
Informations personnelles :
Nom : Homme Olivier Dehorter
Localisation : France

Informations professionnelles :
Activité : Ingenieur de recherche - Ecologue

Informations forums :
Inscription : juin 2003
Messages : 697
Points : 837
Points : 837
sous FIREBIRD

Code :
1
2
SELECT SUBSTRING('[xxxxxxxxxxx] yyyyyy' FROM 2 FOR (POSITION(']', '[xxxxxxxxxxx] yyyyyy') - 2))
  FROM Rdb$database
dehorter olivier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/04/2011, 16h15   #3
Membre à l'essai
 
Inscription : mai 2006
Messages : 67
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 67
Points : 21
Points : 21
Merci pour ta réponse

J'ai essayé chez moi :

Code :
1
2
3
4
5
6
7
8
SELECT SUBSTRING
       (
                id_offre FROM 2 FOR 
                (
                      POSITION
                     (']', id_offre) - 2
                 )
      ) FROM ma TABLE
Ca ne marche pas malheureusement.
A quoi correspondrait le "FROM 2"?

Je ne sais pas si la fonction DUMP pourrais m'aider.

Précision : id_offre = [xxxxxx] yyyyy
Précision je suis sous oracle (pl/sql developper 6)
Shixz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/04/2011, 16h18   #4
Membre émérite
 
Avatar de Drizzt [Drone38]
 
Homme
Inscription : mai 2004
Messages : 739
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Isère (Rhône Alpes)

Informations forums :
Inscription : mai 2004
Messages : 739
Points : 979
Points : 979
Pour Oracle :

Code :
SUBSTR(<value>, <starting_position>, <number_of_characters>)
__________________
Je ne réponds pas aux questions techniques par MP, le forum est là pour cela.

La crypto c'est comme les flambys, une fois que tu as trouvé la languette tu as juste à tirer pour tout faire tomber.

(\ _ /)
(='.'=)
Voici Lapinou. Aidez le à conquérir le monde
(")-(") en le reproduisant
Drizzt [Drone38] est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/04/2011, 16h25   #5
Membre émérite
 
Homme Olivier Dehorter
Ingenieur de recherche - Ecologue
Inscription : juin 2003
Messages : 697
Détails du profil
Informations personnelles :
Nom : Homme Olivier Dehorter
Localisation : France

Informations professionnelles :
Activité : Ingenieur de recherche - Ecologue

Informations forums :
Inscription : juin 2003
Messages : 697
Points : 837
Points : 837
re

le FROM en question est dans la fonction SUBSTRING.
Ce n'est pas une clause SQL

Je le repete c'est une requete qui fonctionne sous FIREBIRD, mais pas sur toutes les bases de donnees; sous-entendu cela aurait ete sympa de nous preciser la base utilisee

a+

olivier
dehorter olivier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/04/2011, 16h39   #6
Membre à l'essai
 
Inscription : mai 2006
Messages : 67
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 67
Points : 21
Points : 21
Alors le souci c'est donc de récupérer dynamiquement la longueur de la chaine de caractère. Parce que la fonction position, il connait pas chez moi.

EDIT : Oracle version 8
Shixz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/04/2011, 17h02   #7
Membre régulier
 
Inscription : septembre 2008
Messages : 84
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 84
Points : 88
Points : 88
essayez :
Code :
1
2
WITH t AS (SELECT '[xxxxxx] yyyyyyyy' a FROM dual)
SELECT substr(a, 2, instr(a, ']')-2) FROM t
spdev666 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 27/04/2011, 17h25   #8
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 437
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 437
Points : 4 173
Points : 4 173
En étant plus générique sur la position du [
Code :
1
2
3
4
5
6
7
8
9
10
11
WITH t AS (
SELECT 'a[123456] yyyyyyyy' a FROM dual
UNION SELECT '123456] yyyyyyyy' a FROM dual
UNION SELECT '[123456 yyyyyyyy' a FROM dual
)
SELECT a, SUBSTR(a, INSTR(a, '[')+1, INSTR(a, ']')-INSTR(a, '[')-1) 
FROM t
A	SUBSTR(A,INSTR(A,'[')+1,INSTR(A,']')-INSTR(A,'[')-1)
123456] yyyyyyyy	123456
[123456 yyyyyyyy	<NULL>
a[123456] yyyyyyyy	123456
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/04/2011, 11h37   #9
Membre à l'essai
 
Inscription : mai 2006
Messages : 67
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 67
Points : 21
Points : 21
Super ca marche!

Merci pour votre aide
Shixz est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h18.


 
 
 
 
Partenaires

Hébergement Web