Den här artikeln syftar till att hjälpa dig förstå DIFFERENCE()
funktion, som är en T-SQL-funktion tillgänglig i SQL Server, Azure, etc.
Nyckeln till att förstå DIFFERENCE()
Funktionen är att förstå hur Soundex fungerar (eller i sammanhanget med SQL Server, hur SOUNDEX()
funktionen fungerar). Detta beror på att DIFFERENCE()
funktion returnerar skillnaden mellan Soundex-värdena mellan två strängar.
Ett Soundex-värde är fyra tecken långt. Om två ord låter lika, kommer de att dela samma fyra tecken Soundex-värde. Om de låter lika (men inte lika), kan deras Soundex-värden dela vissa karaktärer men inte alla. Till exempel kan deras Soundex-värden ha två tecken som är lika och två som är olika. Om två ord låter helt olika kommer ingen av tecknen i deras respektive Soundex-värden att vara densamma.
DIFFERENCE()
funktion returnerar ett värde som sträcker sig från 0
till 4
. Detta värde representerar antalet tecken i Soundex-värdena som är desamma. 0
indikerar svag eller ingen likhet, och 4
indikerar stark likhet eller samma värden.
Syntax
Först, här är syntaxen:
DIFFERENCE ( character_expression , character_expression )
Som nämnts accepterar denna funktion två argument. Soundex-koderna för varje teckenuttryck jämförs och resultatet returneras.
Exempel – Exakt matchning
Här är ett exempel på vad som händer när båda strängarna låter likadana (dvs de har samma Soundex-värde):
SELECT DIFFERENCE('Two','Too');
Resultat:
4
Resultatet är 4
, vilket är högsta möjliga värde. Detta betyder att det finns en stark likhet mellan de två strängarna (så långt som deras Soundex-värden går).
Om du undrar var numret 4
kom ifrån, ta en titt på följande kod:
SELECT SOUNDEX('Two') AS Two, SOUNDEX('Too') AS Too;
Resultat:
Two Too ---- ---- T000 T000
I det här exemplet SOUNDEX()
funktion används för att returnera Soundex-koderna för varje ord. Som det visar sig har båda orden samma Soundex-koder (T000
). Och eftersom alla fyra tecknen i Soundex-koderna är samma, DIFFERENCE()
returnerar 4
.
Exempel – Låg likhet
Här är ett exempel på hur det fungerar när strängarna har en lägre likhet:
SELECT DIFFERENCE('Tea','Coffee');
Resultat:
2
Resultatet är 2
, som är i mitten. Strängarna låter inte exakt likadana, men de har vissa likheter.
Och som med föregående exempel kan vi se var detta resultat kom ifrån genom att köra följande kod:
SELECT SOUNDEX('Tea') AS Tea, SOUNDEX('Coffee') AS Coffee;
Resultat:
Tea Coffee ---- ------ T000 C100
Så vi kan se att endast två av Soundex-karaktärerna är lika mellan dessa ord. Därför DIFFERENCE()
resultatet är 2
.
Exempel – Ingen likhet
Här är ett exempel på hur det fungerar när strängarna har en svag eller ingen likhet:
SELECT DIFFERENCE('Tree','Captivated');
Resultat:
0
Resultatet är 0
, vilket betyder att strängarna har en mycket svag eller ingen likhet.
Och här är Soundex-koderna för dessa två ord:
SELECT SOUNDEX('Tree') AS Tree, SOUNDEX('Captivated') AS Captivated;
Resultat:
Tree Captivated ---- ---------- T600 C131
Så i det här fallet är inget av tecknen detsamma, därav en DIFFERENCE()
resultat av 0
.