Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1154 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [SQL server] Probleme de fonction de chaine (parsing)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[SQL server] Probleme de fonction de chaine (parsing)

n°873005
Maitre_lut​in
Posté le 14-10-2004 à 11:38:17  profilanswer
 

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   :sweat:  
 
->>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 ?
 :)


Message édité par Maitre_lutin le 14-10-2004 à 12:07:44
mood
Publicité
Posté le 14-10-2004 à 11:38:17  profilanswer
 

n°874336
Arjuna
Aircraft Ident.: F-MBSD
Posté le 15-10-2004 à 18:14:24  profilanswer
 

Impossible sans faire un T-SQL. Cherche de ce côté pour faire une FONCTION qui renvoie un objet de type TABLE.
 
Ainsi, tu pourras faire :
 
SELECT *
FROM
TAFONCTION(SELECT LECHAMP FROM LATABLE WHERE ID = 1)
 
Si tu te débrouille bien, mettons que "SELECT LECHAMP FROM LATABLE WHERE ID = 1" retourne "8&9&50&52&55&72" alors la requête retournera :
8
9
50
52
55
72
 
=> Pour ce qui est de la fonction elle-même, je te laisse chercher, je n'ai pas le temps de trop y réfléchir. Je pense que faire une boucle sur le PATINDEX et insérer dans une table temporaire chaque occurence est une solution simple et efficace.
 
Exemple de fonction retournant un objet de type table (trouvé dans la doc, en cherchant "table function" )
 

Code :
  1. CREATE FUNCTION LargeOrderShippers ( @FreightParm money )
  2. RETURNS @OrderShipperTab TABLE
  3.    (
  4.     ShipperID     int,
  5.     ShipperName   nvarchar(80),
  6.     OrderID       int,
  7.     ShippedDate   datetime,
  8.     Freight       money
  9.    )
  10. AS
  11. BEGIN
  12.    INSERT @OrderShipperTab
  13.         SELECT S.ShipperID, S.CompanyName,
  14.                O.OrderID, O.ShippedDate, O.Freight
  15.         FROM Shippers AS S
  16.              INNER JOIN Orders AS O ON (S.ShipperID = O.ShipVia)
  17.         WHERE O.Freight > @FreightParm
  18.    RETURN
  19. END


 
L'exemple d'appel :
 

Code :
  1. SELECT *
  2. FROM LargeOrderShippers( $500 )


 
(simple comme bonjour ;))

n°874337
Arjuna
Aircraft Ident.: F-MBSD
Posté le 15-10-2004 à 18:15:58  profilanswer
 

PS: si t'as besoin de prendre plusieurs lignes à la fois en entrée de ta fonction (pour traîter plusieurs lignes à la fois) alors il te faudra prendre en paramètre un object de type TABLE aussi, et le parcourir. Cherche dans la doc, il y a plein d'exemples pour faire chaque partie de ce que tu veux.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [SQL server] Probleme de fonction de chaine (parsing)

 

Sujets relatifs
[Java] Problème d'execution avec le jdk1.5.0 (commande java)probleme de lecture fichier
Probleme de test sur une variable en VBprobleme : net group Admins du domaine /ADD user
Tcl-Tk: fonction traceProblème d'affichage de chaine de caracatères en PHP
Erreur SQLProblème Thread en java
redirection selon une fonction 
Plus de sujets relatifs à : [SQL server] Probleme de fonction de chaine (parsing)


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR