Page 1 sur 1
LIKE avec des chiffres ?
Posté : 27 avr. 2005, 22:35
par Franquito
Bonsoir à tous
J'aurai voulu savoir s'il était possible d'utiliser LIKE dans une requete SQL mais uniquement pour des chiffres ?
par exemple comme 'LIKE AOCB%' mais cette fois ci le % remplacerais une chaine de numéro comme "0315" ou bien "6" voir "12"...
De fait je pourrai selectionner :
AOCB0315
AOCB6
AOCB12
Mais pas :
AOCBSY6
Voyez vous une solution ? [0-9999] comme sous linux ?
Posté : 27 avr. 2005, 22:37
par pjl
regarde du coté des expressions régulières.
par contre, je ne suis pas sur que toutes les versions de BDD les acceptent.
Posté : 27 avr. 2005, 22:38
par Cyrano
Avec LIKE, je ne suis pas certain, mais avec
REGEXP sûrement
Posté : 27 avr. 2005, 22:45
par albat
Si ton champ est déclaré dans un type chaîne de caractères,
tu dois pouvoir utiliser l'instruction LIKE sans problèmes.
SELECT * FROM table WHERE champ LIKE "%123%"
devrait te retourner la valeur ABC123DEF
Posté : 27 avr. 2005, 22:47
par pjl
Mais ca lui ramènera cette valeur AOCBSY6 qu'il ne veut pas.
Re: LIKE avec des chiffres ?
Posté : 28 avr. 2005, 09:07
par Ripat
Voyez vous une solution ? [0-9999] comme sous linux ?
Oui. Mais, même sous Linux, la classe [0-9999] n'existe pas.
Si on répugne à utiliser les expressions régulières on devrait pouvoir s'en tirer avec CAST->SUBSTRING et faire une comparaison sur la valeur retournée, mais c'est vraiment tordu. Pas recommandé non plus côté perfo.
Contrairement à leur réputation, les regex sont performantes lorsque utilisées à bon escient. D'autant plus que le moteur regex de MySQL, comme celui d'egrep de Linux ou de awk, est du type DFA (Deterministic Finite Automation) beaucoup plus simple, moins riche que les regex PHP mais encore plus rapide.
Posté : 28 avr. 2005, 10:35
par albat
Mais ca lui ramènera cette valeur AOCBSY6 qu'il ne veut pas.
Au temps pour moi, j'avais mal compris la question.

À la relecture, je n'ai pas d'autre idée que les regexp effectivement.
Posté : 28 avr. 2005, 21:47
par Franquito
Merci les gars, j'ai finalement opté pour les expressions règulières, ca marche niquel.
Encore Merci

Posté : 02 mai 2005, 09:45
par Franquito
Avant de mettrre le [resolu] dans le titre, j'aurai voulu savoir si l'ont peut faire l'inverse ? c'est a dire retirer les derniers numéro de la chaine ?
Par exemple :
AOCB6 => AOCB
VDPSY5 => VDPSY
VDPB12 => VDPV
Merci d'avance

Posté : 02 mai 2005, 09:48
par Cyrano
En utilisant la fonction
trim(), ça devrait pouvoir se faire.
Posté : 02 mai 2005, 10:20
par albat
moi, je pense plutôt à un
str_replace()
for ($i=0 ; $i<9 ; $i++)
$chaine = str_replace("'".$i."'", "", $chaine);
Posté : 02 mai 2005, 11:12
par Franquito
J'ai finalement opté pour :
Code : Tout sélectionner
$mask = '`([A-Z]+)([0-9]+)`';
$vins = preg_replace($mask, '$1' , $ref);
Merci a tous