Beh, difference restituisce 'il grado di similitudine di due stringhe'.
Se non fa al caso tuo, forse dovresti indicare quale peculiarità ti
serve, che non sia coperta da Difference.
Ciao
Alberto
--
"Se viriamo, viriamo viriamo viriamo;
Se andiamo dritti, viriamo"
(Cit. "il tattico")
Ciao Andrea,
che io sappia SQL Server 2000 non implementa una funzione simile a quella
che cerchi.
Credo che l'unica alternativa sia quella di eseguire la "similar_text" lato
client.
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo
http://italy.mvps.org
potressi sfruttare la distanza Levenshtein, cioè il numero di passaggi
neccessari per trasformare una parola in un altra, trovi molti dettagli in:
http://www.merriampark.com/ld.htm
e un'implementazione tsql in:
http://www.merriampark.com/ldtsql.htm
per una implementazione tsql migliore servirebbero le matrici...
sarebbe interessante elaborarne una nuova buona versione tsql, magari
partendo dall'interessante versione perl:
http://www.mgilleland.com/ld/ldperl2.htm
marc.
Andrea ha scritto:
ci ho lavorato un po' [serve pure a me!] senza grandi risultati.
Ne ho fatta una versione per sql 2005 che mi soddisfa abbastanza, è il
primo caso di uso del CLR che mi capita...è stato divertente. :-)
CLR [C#]----------------------------------------
public class Tools
{
public static int Levenshtein(string s, string t)
{
int n = s.Length;
int m = t.Length;
char[] ss=s.ToCharArray();
char[] tt=t.ToCharArray();
int[,] d=new int[n+1,m+1];
int i,j;
if(n==0) return m;
if(m==0) return n;
for(i=0;i<n+1;i++) d[i,0]=i;
for(i=0;i<m+1;i++) d[0,i]=i;
for(i=1;i<n+1;i++)
for(j=1;j<m+1;j++)
d[i,j]=System.Math.Min(
System.Math.Min(d[i-1,j]+1,d[i,j-1]+1),
d[i - 1, j - 1] + (ss[i - 1] == tt[j - 1] ? 0 : 1));
return d[n, m];
}
}
-------------------------------------------------
SQL ---------------------------------------------
CREATE ASSEMBLY MyTools from 'C:\Test\Test\Test\bin\Release\test.dll'
WITH PERMISSION_SET = SAFE
go
create function f_Levenshtein(@t1 nvarchar(125),@b nvarchar(125))
returns int
as
external name MyTools.Tools.Levenshtein
go
select dbo.f_Levenshtein('gumbo','gamboll')
go
drop function f_Levenshtein
go
drop assembly MyTools
------------------------------------------------
marc.
Marcello ha scritto: