Bonjour,
dans un champ SQL - appelons le CHAMP_A -, sont stockés des identifiants numériques sous la forme d'une liste d'entiers séparés par des virgules.
Ces champs peuvent stocker une ou plusieurs valeurs (uniques).
Par ex.
- un tel champ pourrait contenir : "1,12,21,131,234,28" (cas 1)
- ou bien : "45,121,35"
- ou bien : "12,24" (cas 3)
- ou bien : "32,12" (cas 4)
- ou bien juste : "12" (cas 5)
Je cherche à faire un test qui trouverait les enregistrements dont le champ CHAMP_A contient tel ou tel identifiant.
Par ex. je veux trouver les enregistrements dont le CHAMP_A contient la valeur "12"
Le problème est de trouver la bonne expression régulière qui permette de retourner le résultat voulu : cela suppose de gérer tous les cas possibles (où l'entier recherché est au début, à la fin, tout seul, parmi d'autres d'autres valeurs) et aussi d'exclure les cas où le nombre cherché est une partie d'autres nombres (par ex. la chaine "12" est contenue dans la chaine "121").
Pour les 5 cas pris en ex. ci-dessus :
- le cas 1 doit matcher / correspondre (car il y a bien le nombre 12 parmi les valeurs)
- le cas 3 doit matcher (12 est en début de chaine)
- le cas 4 doit matcher (12 est en fin de chaine)
- le cas 5 doit matcher (même si 12 est la seule valeur)
- MAIS le cas 2 ne doit PAS matcher (car 121, ce n'est pas 12)
Je n'arrive pas à construire la bonne regex pour cela.
Pour l'instant j'utilise celle-ci (/,?12,?/), mais le problème est qu'elle retourne 121 si l'on cherche 12...
Merci d'avance pour vos conseils et pistes.
JG







Répondre avec citation
Partager