requete sql sur un champ conteant une liste de valeurs

heliotrope

Membre actif
4 Juin 2004
647
34
50
salut,

J'aurai besoin d'un petit coup de main et de conseil pour la syntaxe d'une requete sql.

Je souhaiterai verifier la presence d'une valeur dans un champ contenant une liste de valeur ayant cette forme par exemple 1|2|3|4 ou avec un autre separateur ",".

Merci
 
soient matab (la table), matab_id (identifiant de l'enregistrement) de valeur X correspondant à l'identifiant de l'enregsitrement à tester, matab_champ (le champ dans lequel on cherche la valeur) et - le séparateur


SELECT count( matab_id ) AS "nb occurences"
FROM matab
WHERE matab_champ LIKE "%-valeur_cherchée-%"
AND matab_id =X

cela te renvoie 1 si la chaine est trouvée, sinon 0
 
Merci de vos réponses

@fredmac
:-D ARGHHH les regex

@starmac
je vais tester mais d'apres ce que je comprends (je suis une brele concernant sql donc faut pas m'en vouloir si je dis une c********e) ta requete me renvoie true ou false et si true on me renvoie le nombre d'enregistrement répondant à la condition.

Je cherche plutot à obtenir la liste des enregistrements filtrés sur la présence ou non de la valeur recherchée.

En googlant j'ai trouvé ça

Select nom From Latable
Where ', ' || leChamp || ',' like '%, 1,%'

qui est censé fonctionner pour un formatage strict mais après test si dans la liste des valeurs on a 12, 21 etc il les renvoit qd meme donc pour l'instant je galere :)
 
Excuse moi mais je n'avais pas compris ta question : je partais sur une simple validation pour un enregistrement donné.

SELECT matab_id
FROM matab
WHERE matab_champ LIKE "%,valeur_cherchée,%"
or matab_champ LIKE "%,valeur_cherchée"
or matab_champ LIKE "valeur_cherchée,%"
cela te renvoie la liste des enregistrements contenant la chaine "valeur_cherchée" (au milieu, à la fin ou au début du champ)

Mais je ne comprends pas ta phrase :
si dans la liste des valeurs on a 12, 21 etc il les renvoit qd meme donc pour l'instant je galere :)
 
starmac a dit:
Excuse moi mais je n'avais pas compris ta question : je partais sur une simple validation pour un enregistrement donné.

SELECT matab_id
FROM matab
WHERE matab_champ LIKE "%,valeur_cherchée,%"
or matab_champ LIKE "%,valeur_cherchée"
or matab_champ LIKE "valeur_cherchée,%"
cela te renvoie la liste des enregistrements contenant la chaine "valeur_cherchée" (au milieu, à la fin ou au début du champ)

Mais je ne comprends pas ta phrase :

Je faisais référence à la formule que j'ai trouvé sur le net.
En l'utilisant pour une requete avec comme condition valeur_recherchée = 1, jobtenais dans la liste des résultats, les enregistrement qui ont dans la liste la valeur 1 dans la chaine par exemple 21, 15, etc ...
et non pas "1" tout court


EDIT: Merci starmac cela fonctionne :)
 
et ma deuxième proposition te convient ?