Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[WD12] MySQL et sensibilié à la ponctuaction

8 réponses
Avatar
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

8 réponses

Avatar
Firetox
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" a écrit dans le message de
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




Avatar
JeAn-PhI
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
Avatar
Jerome PAULIN
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
Avatar
JeAn-PhI
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
Avatar
Gilles
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.
Avatar
Gilles
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...
Avatar
Firetox
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 ?
Avatar
JeAn-PhI
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