Accueil > > > SOUNDEX ELARGIE
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
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
|
Derniers Blogs
UNE JOLIE-HORLOGE ET PAS QU'UN PEU !UNE JOLIE-HORLOGE ET PAS QU'UN PEU ! par neodante
Pour les possesseurs d'iPhone, ça y est Bijin Tokei - qui se traduit littéralement en Français par " Jolie Horloge " - est arrivé et GRATUITEMENT s'il vous plaît ! Après la version Tokyo, Hokkaido, night club, racing, Gal, "pour les mademoiselles'", . voi...
Cliquez pour lire la suite de l'article par neodante TECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICESTECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICES par ROMELARD Fabrice
Animé par: Gaetan Bouveret et Julien Chomarat Business Connectivity Services (BCS) est dans SharePoint 2010 la version 2 de Business Data Catalog (BDC dans SharePoint 2007). Il s'agit de la solution permettant de visualiser des données provenan...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE[DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE par orion
Comme de nombreux geek, je suis un grand amateur de série TV et je rate régulièrement des épisodes de mes séries préférés. Une solution s'offre à vous avec ce merveilleux site : Tv Gorge - www.tvgorge.com Moteur de recherche à l'appui, vous pouvez ...
Cliquez pour lire la suite de l'article par orion TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Vincent Bellet et Baptiste Giraudier La BI dans SharePoint 2010, Les nouveaux services d'application dans SP2010 et SQL Server Reporting services 2008 R2. La BI dans SharePoint est généralisée pour tous afin de permettre à tous les coll...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
PROCEDURE MYSQLPROCEDURE MYSQL par gearmat
Cliquez pour lire la suite par gearmat
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|