|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
SOUNDEX ELARGIE
Information sur la source
Description
La fonction soundex de SQL ne retourne qu'un son sur 5 caractères. Pour affiner les comparaison de sonorité de phrase, la fonction big_soundex(@chaine nvarchar, @longueur int) retourne une chaine sonore d'une longueur défini par le parametre @longueur qui est cependant limité a 10 caractères ici, mais a vous de modifier le code pour augmenter (attention au delai d'execution dans ce dernier cas)
Source
- CREATE FUNCTION big_soundex
- (@WordString nvarchar(50), @SoundExLen int)
- RETURNS nvarchar(10)
- AS
- begin
- declare @Counter int
- declare @CurrChar char(1)
- declare @retVal nvarchar(10)
-
- // test de la longueur demandé
- If @SoundExLen > 10
- begin
- set @SoundExLen = 10
- end
- if @SoundExLen < 4
- begin
- set @SoundExLen = 4
- end
-
- set @SoundExLen = @SoundExLen - 1
-
- // soundex ne travail qu'avec des lettres capitale
- set @WordString = upper(@WordString)
-
- SET @Counter = 1
- //on parcours la chaine et on remplace tout ce qui n'est pas une lettre par un blanc
- WHILE @Counter <= len(@WordString)
- BEGIN
- If ASCII(SUBSTRING(@WordString, @Counter, 1)) < 65 Or ASCII(SUBSTRING(@WordString, @Counter, 1)) > 90
- BEGIN
- set @WordString = Left(@WordString, @Counter - 1) + ' ' + SUBSTRING(@WordString, @Counter + 1, len(@WordString))
- End
- set @counter = @counter + 1
- END
- //suppression des eventuels espace en debut et en fin de chaine
- set @WordString = lTrim(rtrim(@WordString))
-
- //création du 'son'
- If Len(lTrim(rtrim(@WordString))) = 0
- begin
- set @retVal = ''
- end
- Else
- begin
- set @retVal = @WordString
-
- set @retVal = Replace(@retVal, 'A', '0')
- set @retVal = Replace(@retVal, 'E', '0')
- set @retVal = Replace(@retVal, 'I', '0')
- set @retVal = Replace(@retVal, 'O', '0')
- set @retVal = Replace(@retVal, 'U', '0')
- set @retVal = Replace(@retVal, 'Y', '0')
- set @retVal = Replace(@retVal, 'H', '0')
- set @retVal = Replace(@retVal, 'W', '0')
- set @retVal = Replace(@retVal, 'B', '1')
- set @retVal = Replace(@retVal, 'P', '1')
- set @retVal = Replace(@retVal, 'F', '1')
- set @retVal = Replace(@retVal, 'V', '1')
- set @retVal = Replace(@retVal, 'C', '2')
- set @retVal = Replace(@retVal, 'S', '2')
- set @retVal = Replace(@retVal, 'G', '2')
- set @retVal = Replace(@retVal, 'J', '2')
- set @retVal = Replace(@retVal, 'K', '2')
- set @retVal = Replace(@retVal, 'Q', '2')
- set @retVal = Replace(@retVal, 'X', '2')
- set @retVal = Replace(@retVal, 'Z', '2')
- set @retVal = Replace(@retVal, 'D', '3')
- set @retVal = Replace(@retVal, 'T', '3')
- set @retVal = Replace(@retVal, 'L', '4')
- set @retVal = Replace(@retVal, 'M', '5')
- set @retVal = Replace(@retVal, 'N', '5')
- set @retVal = Replace(@retVal, 'R', '6')
-
- set @CurrChar = Left(@retVal, 1)
- set @counter = 2
- //on retire les son successif iddentique
- while @counter <= len(@retVal)
- begin
- If substring(@retVal, @Counter, 1) = @CurrChar
- begin
- set @retVal = Left(@retVal, @Counter - 1) + substring(@retVal, @Counter + 1, len(@retVal))
- end
- Else
- begin
- set @CurrChar = SUBSTRING(@retVal, @Counter, 1)
- End
- set @counter = @counter + 1
- end
-
- //suppression des blanc
- set @retVal = Replace(@retVal, ' ', '')
-
- //suppression des 0
- set @retVal = substring(@retVal, 2, len(@retVal))
- set @retVal = Replace(@retVal, '0', '')
-
- // on ajoute des 0 si le 'son' est trop court pour etre sur d'avoir le nombre de caractère voulue
- set @retVal = @retVal + REPLICATE('0', @SoundExLen)
- set @retVal = Left(@WordString, 1) + Left(@retVal, @SoundExLen)
-
- End
- // retour du son
- return @retVal
- end
CREATE FUNCTION big_soundex
(@WordString nvarchar(50), @SoundExLen int)
RETURNS nvarchar(10)
AS
begin
declare @Counter int
declare @CurrChar char(1)
declare @retVal nvarchar(10)
// test de la longueur demandé
If @SoundExLen > 10
begin
set @SoundExLen = 10
end
if @SoundExLen < 4
begin
set @SoundExLen = 4
end
set @SoundExLen = @SoundExLen - 1
// soundex ne travail qu'avec des lettres capitale
set @WordString = upper(@WordString)
SET @Counter = 1
//on parcours la chaine et on remplace tout ce qui n'est pas une lettre par un blanc
WHILE @Counter <= len(@WordString)
BEGIN
If ASCII(SUBSTRING(@WordString, @Counter, 1)) < 65 Or ASCII(SUBSTRING(@WordString, @Counter, 1)) > 90
BEGIN
set @WordString = Left(@WordString, @Counter - 1) + ' ' + SUBSTRING(@WordString, @Counter + 1, len(@WordString))
End
set @counter = @counter + 1
END
//suppression des eventuels espace en debut et en fin de chaine
set @WordString = lTrim(rtrim(@WordString))
//création du 'son'
If Len(lTrim(rtrim(@WordString))) = 0
begin
set @retVal = ''
end
Else
begin
set @retVal = @WordString
set @retVal = Replace(@retVal, 'A', '0')
set @retVal = Replace(@retVal, 'E', '0')
set @retVal = Replace(@retVal, 'I', '0')
set @retVal = Replace(@retVal, 'O', '0')
set @retVal = Replace(@retVal, 'U', '0')
set @retVal = Replace(@retVal, 'Y', '0')
set @retVal = Replace(@retVal, 'H', '0')
set @retVal = Replace(@retVal, 'W', '0')
set @retVal = Replace(@retVal, 'B', '1')
set @retVal = Replace(@retVal, 'P', '1')
set @retVal = Replace(@retVal, 'F', '1')
set @retVal = Replace(@retVal, 'V', '1')
set @retVal = Replace(@retVal, 'C', '2')
set @retVal = Replace(@retVal, 'S', '2')
set @retVal = Replace(@retVal, 'G', '2')
set @retVal = Replace(@retVal, 'J', '2')
set @retVal = Replace(@retVal, 'K', '2')
set @retVal = Replace(@retVal, 'Q', '2')
set @retVal = Replace(@retVal, 'X', '2')
set @retVal = Replace(@retVal, 'Z', '2')
set @retVal = Replace(@retVal, 'D', '3')
set @retVal = Replace(@retVal, 'T', '3')
set @retVal = Replace(@retVal, 'L', '4')
set @retVal = Replace(@retVal, 'M', '5')
set @retVal = Replace(@retVal, 'N', '5')
set @retVal = Replace(@retVal, 'R', '6')
set @CurrChar = Left(@retVal, 1)
set @counter = 2
//on retire les son successif iddentique
while @counter <= len(@retVal)
begin
If substring(@retVal, @Counter, 1) = @CurrChar
begin
set @retVal = Left(@retVal, @Counter - 1) + substring(@retVal, @Counter + 1, len(@retVal))
end
Else
begin
set @CurrChar = SUBSTRING(@retVal, @Counter, 1)
End
set @counter = @counter + 1
end
//suppression des blanc
set @retVal = Replace(@retVal, ' ', '')
//suppression des 0
set @retVal = substring(@retVal, 2, len(@retVal))
set @retVal = Replace(@retVal, '0', '')
// on ajoute des 0 si le 'son' est trop court pour etre sur d'avoir le nombre de caractère voulue
set @retVal = @retVal + REPLICATE('0', @SoundExLen)
set @retVal = Left(@WordString, 1) + Left(@retVal, @SoundExLen)
End
// retour du son
return @retVal
end
Conclusion
exemple : select mabase.dbo.big_soundex('soundex ne retourne pas un son assez précis', 10) retourne : S532500000 alors que : select soundex('soundex ne retourne pas un son assez précis') ne retourne que S532
Sources de la même categorie
Sources en rapport avec celle ci
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
SoundEx [ par juki_webmaster ]
Bonjour,Je voit quelques sources tout en tour de codes-sources et meme cs qui utilise cette 'methode de recherche' parler du SoundEx.Je souhaite savoi
Fonction Difference (soundex) SQL server [ par oluha ]
BonjourJ'ai besoin d'utiliser la fonction Difference (qui se base sur le soundex) mais je trouve qu'elle n'est pas assez précise du fait que le sounde
Recherche dans une table [ par Fildomen ]
sltquelle est la commande pour chercher un mot dans une table où la colonne "TXT" contient du texte???et classer les réponses par pertinence
Recherche Approximative [ par eowene ]
Bonjour à tous. J'aimerais savoir comment faire pour faire une recherche approximative sur un champ de ma base de données. Je m'explique.
pb avec les caractères génériques !!!! [ par GerardChezy ]
Bonjour.J'ai un pb dans ma requete (sur sqlserver 2000) avec le caractère générique _ (celui qui remplace 1 caractère).Lorsque je
indexation mysql [ par dibouched ]
bojour , j'ai une base de données mysql et je cherceh comment indexer des colonne pour une recherche fulltext ensuite mon probleme est que
quote et recherche de texte intégral [ par karn ]
Bonjour,J'ai crée une base qui supporte la recherche de texte integral sous sql server, les requetes de recherche marche bien sauf avec les mot c
Soundex, ou Ratcliff Obershelp Levenshtein algorytme [ par pluplu ]
Bonjour, quelqu'un a t'il déja implémenter la technique Soundex, ou Ratcliff Obershelp Levenshtein dans une stored procédure en SQL.Je
Moteur de recherche SQL 2000 [ par vindavid38 ]
ZanTarBonjour je souhaiterais savoir si sql 2000 a un moteur spécial pour le fonctionnement du partitionnement horizontal?? Est ce que
recherche mot clé [ par nick774 ]
Salut, On m'a redirigé sur votre site alors je tente ma chance... Soit: lechamp1 et lechamp2 les éléments du formulaire (page1.asp) c
|
Téléchargements
Logiciels à télécharger sur le même thème :
|