Explode en SQL

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Explode en SQL

Re: Explode en SQL

par benji » 15 nov. 2011, 09:52

Merci (encore!) Moogli :wink:
Je penche aussi pour le défaut de conception, je plaide coupable :oops:
Merci pour la réponse en tous cas, je vais arranger ça un peu mieux pour pouvoir faire une requête moins lourde :wink:

Re: Explode en SQL

par moogli » 15 nov. 2011, 09:34

Salut,

La va falloir sûrement est plus complexe que cela ;)
Pour simplifier il faut faire une fonction (Sql) qui va boucler sur la chaîne à grand coup de strpos et substr
Il faut que tu 'cast' ta chaîne en entier et ensuite avg, le mieux étant que retour d'une table ?

Par contre j'y vois la un défaut de conception tu devrais avoir une table avec les notes ça serat plus simple de faire un sélect classique avec avg et un group by bien sentis ;)

@+

Explode en SQL

par benji » 14 nov. 2011, 19:56

Bonsoir à tous,
Cette fois je me suis créé un compte puisque si ça continue, je vais devoir élire domicile ici :mrgreen: (c'était moi ça hier ici) A croire que tous les soirs, je vais me trouver face à une requête que je n'arrive pas à résoudre #-o

Donc ma question du jour est la suivante : réussir à faire, en SQL, un explode, comme en PHP.
Comme toujours, je ne viens pas ici sans avoir fait de recherches. Visiblement des solutions existent, à coup de SUBSTR, INSTR, SUBSTRING_INDEX, mais j'ai un peu de mal (évidemment, sinon je ne serais pas là), à trouver THE syntaxe correcte et me dépatouiller avec toutes ces fonctions. En admettant que lesdites fonctions soient effectivement la solution à mon problème.

Pour parler clairement, j'ai dans ma table, un champ "notation", qui contient 5 notes, séparées par le signe dièse '#'.
Ce que je veux obtenir au final, c'est de séparer les 5 notes, pour pouvoir en calculer la moyenne. En SQL hein. Car je veux pouvoir ordonner les résultats de ma requête selon cette moyenne justement.

Exemple :
notation
8#7#9#3#1
5#6#7#8#9

>> Le résultat attendu :
notation ----- note1 - note2 - note3 - note4 - note5
8#7#9#3#1 -- 8 7 9 3 1
5#6#7#8#9 -- 5 6 7 8 9

Ma modeste tentative...
SELECT id,nom,notation,
SUBSTRING_INDEX(notation,'#',1) AS note1
FROM matable WHERE notation!=0
Précision
Ce qui me retourne correctement la première note.
Je précise que le champ notation contient soit 0, soit les 5 notes séparées toujours de la même manière par le signe # (d'où la clause WHERE).

Petite complication
Les notes possibles vont de 1 à 10. Ce qui fait qu'entre deux signes dièses on peut aussi bien avoir la note sur un seul caractère, ou sur deux...

Je retourne à mes tests, des fois que j'ai un éclair de génie lol.
Merci pour votre aide !! :priere: