[WD12] MySQL et sensibilié à la ponctuaction

Le
JeAn-PhI
bonjour

sur une clé doublon HF on peut la rendre senssible ou non à la
ponctuation et donc si je fais une recherche comme suit :

données contenues dans le fichier HF :
ABC12345DEF
ABC 12345 DEF

recherche : ABC12345DEF

résultat :
ABC12345DEF
ABC 12345 DEF

je voulais savoir si il existait une chose similaire dans MySQL ?

je ne voudrais pas actuellement remplacé tous les codes sans espace par
des codes avec espace (nouveau format) car la découpe n'est pas
évidente
je peux très bien avoir : AB12CD

avant de me lancer dans la création d'une moulinette d'analyse de
caractère par caractère pour découper ma chaine selon le format :
Lettre (1 à N) Chiffre (1à N) Lettre (1 à N)
cela m'aurait arranger de savoir si je pouvais faire autrement.

merci d'avance

--
Cordialement JeAn-PhI
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Firetox
Le #19774071
BOnjour,

MySQL sera sensible au espace de ton exemple et ne renvera qu'une ligne
il existe sous mySQL la meme fonction que windev : REMPLACE nommée sous
mySQL : REPLACE
(a ne pas confondre avec l'ordre SQL REPLACE a la place de update ou insert)

et j'avoue l'utiliser dans le meme sens que windev sans aucun problemes
surtout dans les where ou le select


bon dev
@+


"JeAn-PhI" news:4a6053f6$0$3408$
bonjour

sur une clé doublon HF on peut la rendre senssible ou non à la ponctuation
et donc si je fais une recherche comme suit :

données contenues dans le fichier HF :
ABC12345DEF
ABC 12345 DEF

recherche : ABC12345DEF

résultat :
ABC12345DEF
ABC 12345 DEF

je voulais savoir si il existait une chose similaire dans MySQL ?

je ne voudrais pas actuellement remplacé tous les codes sans espace par
des codes avec espace (nouveau format) car la découpe n'est pas évidente
je peux très bien avoir : AB12CD

avant de me lancer dans la création d'une moulinette d'analyse de
caractère par caractère pour découper ma chaine selon le format :
Lettre (1 à N) Chiffre (1à N) Lettre (1 à N)
cela m'aurait arranger de savoir si je pouvais faire autrement.

merci d'avance

--
Cordialement JeAn-PhI




JeAn-PhI
Le #19774341
Firetox avait prétendu :
BOnjour,

MySQL sera sensible au espace de ton exemple et ne renvera qu'une ligne


oui effectivement

il existe sous mySQL la meme fonction que windev : REMPLACE nommée sous mySQL :
REPLACE


ok mais je ne vois pas comment il va trouver tous les résultats
select * from table where ????

(a ne pas confondre avec l'ordre SQL REPLACE a la place de update ou insert)



celle-ci ?
REPLACE [LOW_PRIORITY | DELAYED]
[INTO] tbl_name [(col_name,...)]
VALUES ({expr | DEFAULT},...),(...),...

et j'avoue l'utiliser dans le meme sens que windev sans aucun problemes
surtout dans les where ou le select


bon dev
@+





--
Cordialement JeAn-PhI
Jerome PAULIN
Le #19774531
Salut,

select * from latable where replace(champ,' ','')=replace(valeur,' ','')

Attention, ca n'utilisera surement pas les index ... personnellement, je
créerai une colonne avec le champ "nettoyé" pour pouvoir utiliser les
indexes.

gg
JeAn-PhI
Le #19774751
Jerome PAULIN a exprimé avec précision :
Salut,

select * from latable where replace(champ,' ','')=replace(valeur,' ','')

Attention, ca n'utilisera surement pas les index ... personnellement, je
créerai une colonne avec le champ "nettoyé" pour pouvoir utiliser les
indexes.

gg



effectivement en faisant un explain j'obtiens un type "ALL" non "ref"
avec un temps proche d'une demi seconde avec replace contre
"instantané" sur une table de 88 000 enreg

je crois que je vais être obligé de créer une moulinette pour mettre à
jour le champ de la table

merci

--
Cordialement JeAn-PhI
Gilles
Le #19775111
Dans son message précédent, JeAn-PhI a écrit :
bonjour

sur une clé doublon HF on peut la rendre senssible ou non à la ponctuation et
donc si je fais une recherche comme suit :

données contenues dans le fichier HF :
ABC12345DEF
ABC 12345 DEF

recherche : ABC12345DEF

résultat :
ABC12345DEF
ABC 12345 DEF

je voulais savoir si il existait une chose similaire dans MySQL ?

je ne voudrais pas actuellement remplacé tous les codes sans espace par des
codes avec espace (nouveau format) car la découpe n'est pas évidente
je peux très bien avoir : AB12CD

avant de me lancer dans la création d'une moulinette d'analyse de caractère
par caractère pour découper ma chaine selon le format :
Lettre (1 à N) Chiffre (1à N) Lettre (1 à N)
cela m'aurait arranger de savoir si je pouvais faire autrement.

merci d'avance



Tu n'as qu'à faire un peu de redonance de donnée.
Tu stockes une version sans espace ni ponctuation dans une nouvelle
colonne, et tu pourras faire tes recherches sur cette colonne après
avoir fait de même dans ton code.
Gilles
Le #19775201
Firetox avait prétendu :
BOnjour,

MySQL sera sensible au espace de ton exemple et ne renvera qu'une ligne
il existe sous mySQL la meme fonction que windev : REMPLACE nommée sous mySQL :
REPLACE
(a ne pas confondre avec l'ordre SQL REPLACE a la place de update ou insert)

et j'avoue l'utiliser dans le meme sens que windev sans aucun problemes
surtout dans les where ou le select




Quid des index avec un replace?
Je ne m'avancerai pas beaucoup en pensant qu'ils sont inutilisés quand
on utilise une fonction.

Sur des tables volumineuses, ca peut faire mal...
Firetox
Le #19775321
Bonjour,

effectivement en faisant un explain j'obtiens un type "ALL" non "ref"
avec un temps proche d'une demi seconde avec replace contre "instantané"
sur une table de 88 000 enreg



et avec un order sur la colonne sans le replace
(histoire de grugé un peu l'index)

que donne l'explain ?
JeAn-PhI
Le #19776581
Le 17/07/2009, Firetox a supposé :
Bonjour,

effectivement en faisant un explain j'obtiens un type "ALL" non "ref"
avec un temps proche d'une demi seconde avec replace contre "instantané"
sur une table de 88 000 enreg



et avec un order sur la colonne sans le replace
(histoire de grugé un peu l'index)

que donne l'explain ?



il devient de type "index" ce qui est bien mieux que "ALL" mais moins
bien que "ref" par contre le temps reste le même environ un demi
seconde

--
Cordialement JeAn-PhI
Publicité
Poster une réponse
Anonyme