[SQL] Compter le nombre de 'a' dans le texte d'un champ

Compter le nombre de 'a' dans le texte d'un champ [SQL] - SQL/NoSQL - Programmation

Marsh Posté le 19-09-2006 à 14:36:27    

Bonjour,
 
je cherche à faire une requête SQL qui me renvoie, pour chaque enregistrement d'une table, le nombre d'occurences d'un caractère (ex : "a" ) dans un champ. Par exemple pour la table :
 

id | texte
---+-----------------
 1 | arbre
 2 | canard
 3 | madagascar
 4 | etoile


 
je voudrais récupérer, si je compte les "a" dans le champ texte :
 

id | compter
---+-------------
 1 | 1
 2 | 2
 3 | 4
 4 | 0


 
Une idée ?
 
Merci !

Reply

Marsh Posté le 19-09-2006 à 14:36:27   

Reply

Marsh Posté le 19-09-2006 à 14:39:11    

"impossible".
 
plus exactement, via masturbation du bulbe pendant quelques heures ça doit être faisable en SQL pur, mais je te souhaite bien du courage (et vas-y la tambouille... j'ai déjà une idée de comment faire, mais je suis à la limite de l'ancéphalie).
 
tu peux aussi t'orienter vers une PS. ce sera bien plus propre que la solution pourrage que j'ai en tête

Reply

Marsh Posté le 19-09-2006 à 14:41:32    

en gros, la solution que j'ai en tête...
 
mettons que sur ton SGBD, varchar monte jusqu'à 4000 caractères
 
ça donne :
 
prout <= une table avec ID allant de 1 à 4000 (et pas d'autre champ)
 

Code :
  1. select matable.id, sum(decode(substr(matable.texte, prout.id, 1), 'a', 1, 0))
  2. from prout, matable
  3. where prout.id <= length(matable.texte)
  4. group by matable.id


 
(z'avez le droit de vomir :D)


Message édité par MagicBuzz le 19-09-2006 à 14:43:00
Reply

Marsh Posté le 19-09-2006 à 15:01:58    

ouais, pas top effectivement.
je vais peut être chercher une solution plus élégante quitte à repenser la structure de ma table :)

Reply

Marsh Posté le 19-09-2006 à 15:05:07    

En tout cas, après test, ça marche :sol:
 

Code :
  1. select pro.codpro, pro.nompro, sum(decode(substr(pro.nompro, wt_multi.nb, 1), 'A', 1, 0))
  2. from wt_multi, pro
  3. where pro.codsoc = 2
  4. and wt_multi.nb <= length(pro.nompro)
  5. group by pro.codpro, pro.nompro


 

CODPRO NOMPRO SUM(DECODE(SUBSTR(PRO.NO
A0001 PRESENTOIR PLIABLE "LE BAIN"   2  
A0002 TABLE OVALE CHARLES II BLANC   4  
A0003 TABLE OVALE JACQ COEUR BLANC   4  
A0004 PRESENTOIR BACCHUS             1  
A0008 TABLE EPICES VRTE THEMES +2ALL 2  
A0010 TABLE OVALE JACQUES COEUR      3  
A0011 TABLE OVALE CHARLES II         3  
A0012 TABLE OVALE RABELAIS           4  
A0013 PRESENTOIR "SENTEURS SAVEURS"  1  
A0016 LIVRE "TABLES DE CHARME"       2  
A0017 LIVRE "CAFE"                   1


Message édité par MagicBuzz le 19-09-2006 à 15:05:53
Reply

Marsh Posté le 19-09-2006 à 15:15:35    

lol

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed