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

MS SQL Server Discussion :

Probleme de parsing de chaine, tronquer une chaine


Sujet :

MS SQL Server

  1. #1
    Candidat au Club
    Inscrit en
    Octobre 2004
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 2
    Points : 2
    Points
    2
    Par défaut [Résolu] Probleme de parsing de chaine, tronquer une chaine
    Bonjour,

    Voici l'énoncé de mon probleme :
    J'ai dans une table de ma base des champs comme suis :
    "8&9&50&52&55&72"
    ce sont les réponses à des questions à choix multiples d'un questionnaire.
    Les réponses sont séparées par le caractère '&', il faut donc que j'extraie chaque réponse pour l'insérer dans un champs réponse unique
    (dans mon exemple il y a 6 réponses différentes).

    J'ai tout d'abord pensé à utiliser la focntion patindex ( PATINDEX ( '%pattern%' , expression ) ) pour trouver la position des caractères '&' dans la chaine. Cette fonction renvoie la première occurence. (dans mon exemple patindex renvoie '2')
    Ensuite, avec la fonction substring ( SUBSTRING ( expression , start , length ) ), je récupère le chiffre de ma réponse. (je demande le caractère à la position 2-1 soit 8 )
    Mais le probleme c'est que je dois parcourir la chaine pour extraire toutes les réponses. Or patindex ne le permet pas

    ->>J'aurais besoin d'une fonction qui "crop" ou tronque le début de la chaine pour que patindex trouve l'occurence suivante. Ou à défaut une fonction de recherche de caractère qui détermine un tableau de positions.
    Quelqu'un aurait il une pitite solution ?

  2. #2
    Rédacteur/Modérateur

    Avatar de Fabien Celaia
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2002
    Messages
    4 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 4 222
    Points : 19 551
    Points
    19 551
    Billets dans le blog
    25
    Par défaut
    Comme vous l'avez noté, SQL n'est pas le langage de programmation le plus adéquat pour ce genre de traitement de chaînes.

    Pourquoi ce travail ne se fait-il pas directement dans l'applicatif, cecei afin de retourner directement les bonnes valeurs plutôt que de les assembler/désassembler ?

    Si vous persistez dans votre voie, il vous faudra effectivement passer par divers pathindex/substring.

    En psdudo-code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Tant que ma chaine n'est pas vide
      chercher la position de "&"
      Si position > 0
         prendre ce qui est avant la position et l'inserer
         couper la chaine jusqu'a la position
      sinon
         envoyer le residu dans la base
         vider la chaine
    Sr DBA Oracle / MS-SQL / MySQL / Postgresql / SAP-Sybase / Informix / DB2

    N'oublie pas de consulter mes articles, mon blog, les cours et les FAQ SGBD

    Attention : pas de réponse technique par MP : pensez aux autres, passez par les forums !

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 434
    Points : 502
    Points
    502

  4. #4
    Candidat au Club
    Inscrit en
    Octobre 2004
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Merci pour vos réponses.
    Fadace, j'aurais du préciser que j'utilise le transact-sql dans une procédure stockée, ce sera un script qui sera réactivé plusieures fois (car je n'ai pas encore toutes les réponses au questionnaire).
    Après analyse du lien vers le post (merci Zers ), il s'avère que je cherchais la fonction RIGHT ( character_expression , integer_expression ) . Elle permet de renvoyer une partie de chaine en partant de la fin de cette chaine.
    Merci à tout les deux

  5. #5
    FMJ
    FMJ est déconnecté
    Membre averti
    Profil pro
    tutu
    Inscrit en
    Octobre 2003
    Messages
    416
    Détails du profil
    Informations personnelles :
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : tutu

    Informations forums :
    Inscription : Octobre 2003
    Messages : 416
    Points : 356
    Points
    356
    Par défaut
    Bonjour,

    Est-ce qu'il serait possible de m'indiquer comment retrouver le lien donné par Zers à l'époque.


    Je suis également à la recherche d'une méthode permettant d'extraire d'une chaîne de caractères des données sparées par un caractère donné (ex: ";").


    Je précise que je n'ai ni la main sur la structure de la base, ni sur l'applicatif.

    Merci d'avance.

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

Discussions similaires

  1. recherche d'une chaine dans une chaine
    Par jpclutier dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 03/12/2007, 11h30
  2. comment supprimer une chaine d'une chaine?
    Par Philippe PONS dans le forum Framework .NET
    Réponses: 3
    Dernier message: 28/05/2007, 10h47
  3. Tester une chaine dans une chaine
    Par ulysse031 dans le forum Algorithmes et structures de données
    Réponses: 13
    Dernier message: 26/03/2007, 00h48
  4. chercher caractére d'une chaine dans une chaine
    Par ulysse031 dans le forum Langage
    Réponses: 25
    Dernier message: 21/03/2007, 18h09
  5. Réponses: 2
    Dernier message: 19/10/2005, 15h38

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