Denne artikel har til formål at hjælpe dig med at forstå DIFFERENCE()
funktion, som er en T-SQL-funktion tilgængelig i SQL Server, Azure osv.
Nøglen til at forstå DIFFERENCE()
funktion er at forstå, hvordan Soundex fungerer (eller i sammenhæng med SQL Server, hvordan SOUNDEX()
funktion virker). Dette skyldes, at DIFFERENCE()
funktion returnerer forskellen mellem Soundex-værdierne mellem to strenge.
En Soundex-værdi er fire tegn lang. Hvis to ord lyder ens, vil de dele den samme Soundex-værdi på fire tegn. Hvis de lyder ens (men ikke ens), kan deres Soundex-værdier dele nogle karakterer, men ikke alle. For eksempel kan deres Soundex-værdier have to ens karakterer og to, der er forskellige. Hvis to ord lyder helt forskellige, vil ingen af tegnene i deres respektive Soundex-værdier være ens.
DIFFERENCE()
funktion returnerer en værdi, der går fra 0
til 4
. Denne værdi repræsenterer antallet af tegn i Soundex-værdierne, der er de samme. 0
angiver svag eller ingen lighed, og 4
indikerer stærk lighed eller de samme værdier.
Syntaks
Først her er syntaksen:
DIFFERENCE ( character_expression , character_expression )
Som angivet accepterer denne funktion to argumenter. Soundex-koderne for hvert tegnudtryk sammenlignes, og resultatet returneres.
Eksempel – eksakt match
Her er et eksempel på, hvad der sker, når begge strenge lyder ens (dvs. de har samme Soundex-værdi):
SELECT DIFFERENCE('Two','Too');
Resultat:
4
Resultatet er 4
, hvilket er den højest mulige værdi. Dette betyder, at der er en stærk lighed mellem de to strenge (så vidt angår deres Soundex-værdier).
Hvis du undrer dig over, hvor tallet 4
kom fra, skal du tage et kig på følgende kode:
SELECT SOUNDEX('Two') AS Two, SOUNDEX('Too') AS Too;
Resultat:
Two Too ---- ---- T000 T000
I dette eksempel er SOUNDEX()
funktion bruges til at returnere Soundex-koderne for hvert ord. Som det viser sig, har begge ord de samme Soundex-koder (T000
). Og fordi alle fire tegn i Soundex-koderne er de samme, DIFFERENCE()
returnerer 4
.
Eksempel – Lav lighed
Her er et eksempel på, hvordan det virker, når strengene har en lavere lighed:
SELECT DIFFERENCE('Tea','Coffee');
Resultat:
2
Resultatet er 2
, som er i midten. Strengene lyder ikke helt ens, men de har nogle ligheder.
Og som med det forrige eksempel kan vi se, hvor dette resultat kom fra ved at køre følgende kode:
SELECT SOUNDEX('Tea') AS Tea, SOUNDEX('Coffee') AS Coffee;
Resultat:
Tea Coffee ---- ------ T000 C100
Så vi kan se, at kun to af Soundex-karaktererne er ens mellem disse ord. Derfor DIFFERENCE()
resultatet er 2
.
Eksempel – Ingen lighed
Her er et eksempel på, hvordan det virker, når strengene har en svag eller ingen lighed:
SELECT DIFFERENCE('Tree','Captivated');
Resultat:
0
Resultatet er 0
, hvilket betyder, at strengene har en meget svag eller ingen lighed.
Og her er Soundex-koderne for disse to ord:
SELECT SOUNDEX('Tree') AS Tree, SOUNDEX('Captivated') AS Captivated;
Resultat:
Tree Captivated ---- ---------- T600 C131
Så i dette tilfælde er ingen af tegnene ens, derfor en DIFFERENCE()
resultat af 0
.