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 .