#1 Wed 04 March 2015 09:41
- aurelien.quiblier
- Participant actif
- Lieu: Lyon
- Date d'inscription: 26 Oct 2010
- Messages: 146
- Site web
Requête PgAdmin - Sélection entre balises - GéoSource
Bonjour,
Suite à un problème sur GéoSource, Cf. message suivant :
Code:
http://georezo.net/forum/viewtopic.php?id=96081
je souhaiterais effectuer une requête SQL, sur une des tables de la BD PostgreSQL utilisée par GéoSource (pour stocker les métadonnées et informations sur les utilisateurs).
J'aimerais sélectionner seulement les x caractères se situant entre les balises '<gmd:title>' et '</gmd:title>'.
J'ai utilisé la requête suivante :
Code:
select substring(data from (select position('<gmd:title>' in data)) for (select position('</gmd:title>' in data))) from metadata
Celle-ci me retourne tous les caractères des enregistrements compris entre la première balise <gmd:title> et la dernière balise </gmd:title>.
Le problème est que je souhaiterais que ce soit la première et non la dernière balise </gmd:title> qui soit prise en compte. Car il y a 3 balises '</gmd:title>' au total.
Est-ce que ceci est possible ?
Merci d'avance.
Dernière modification par aurelien.quiblier (Wed 04 March 2015 09:41)
Aurélien QUIBLIER
arx iT
Hors ligne
#2 Wed 04 March 2015 11:13
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1554
Re: Requête PgAdmin - Sélection entre balises - GéoSource
Bonjour,
Utilisez plutot une expression régulière pour cela, vous aurez plus de controle sur ce que vous voulez extraire. (http://www.postgresql.org/docs/9.3/inte … tring.html)
PostgreSQL a aussi des fonctions pour traiter le XML, peut etre des pistes de ce coté.
Nicolas
Hors ligne
#3 Wed 04 March 2015 11:35
- Martin Bocquet
- Participant occasionnel
- Date d'inscription: 4 Mar 2015
- Messages: 22
Re: Requête PgAdmin - Sélection entre balises - GéoSource
Bonjour,
Votre problème peut se régler via l'opérateur "substring", qui permet de récupérer une partie de la chaîne de caractères. Il faut cependant utiliser les expressions régulières.
Je pense que ceci pourrait répondre à votre problème :
Code:
substring('[balise] bla bla [/balise] blablabla [/balise]', '[balise].+?[/balise]')
Notez bien la présence du caractère "?", qui permet de prendre la plus petite chaîne.
Bonne journée,
Dernière modification par Martin Bocquet (Wed 04 March 2015 13:34)
Hors ligne
#4 Wed 04 March 2015 12:33
- aurelien.quiblier
- Participant actif
- Lieu: Lyon
- Date d'inscription: 26 Oct 2010
- Messages: 146
- Site web
Re: Requête PgAdmin - Sélection entre balises - GéoSource
Merci pour vos réponses.
J'ai réussi à résoudre mon problème de la manière suivante, en SQL :
SELECT
metadata.id,
split_part(substring(data from (select position('<gmd:title>' in data)) for (select position('</gmd:title>' in data))), '</gmd:title>', 1),
users.username
FROM metadata, users
WHERE owner = users.id
Celle-ci permet d’afficher une liste de fiches de métadonnées, avec leur titre (compris entre les balises '<gmd:title>' et '</gmd:title>'), leur identifiant et l’utilisateur qui l’a créée.
Aurélien QUIBLIER
arx iT
Hors ligne