Cílem tohoto článku je pomoci vám porozumět DIFFERENCE()
funkce, což je funkce T-SQL dostupná v SQL Server, Azure atd.
Klíč k pochopení DIFFERENCE()
funkcí je pochopit, jak funguje Soundex (nebo v kontextu SQL Server, jak SOUNDEX()
funkce funguje). Důvodem je DIFFERENCE()
Funkce vrací rozdíl mezi hodnotami Soundex mezi dvěma řetězci.
Hodnota Soundex má čtyři znaky. Pokud dvě slova znějí stejně, budou mít stejnou čtyřznakovou hodnotu Soundex. Pokud znějí podobně (ale ne stejně), jejich hodnoty Soundex mohou sdílet některé znaky, ale ne všechny. Například jejich hodnoty Soundex mohou mít dva stejné znaky a dva odlišné. Pokud dvě slova znějí zcela odlišně, žádný ze znaků v příslušných hodnotách Soundex nebude stejný.
DIFFERENCE()
funkce vrací hodnotu v rozsahu od 0
až 4
. Tato hodnota představuje počet znaků v hodnotách Soundex, které jsou stejné. 0
označuje slabou nebo žádnou podobnost a 4
označuje silnou podobnost nebo stejné hodnoty.
Syntaxe
Nejprve je zde syntaxe:
DIFFERENCE ( character_expression , character_expression )
Jak je uvedeno, tato funkce přijímá dva argumenty. Soundex kódy každého znakového výrazu jsou porovnány a výsledek je vrácen.
Příklad – Přesná shoda
Zde je příklad toho, co se stane, když obě struny znějí stejně (tj. mají stejnou hodnotu Soundex):
SELECT DIFFERENCE('Two','Too');
Výsledek:
4
Výsledek je 4
, což je nejvyšší možná hodnota. To znamená, že mezi těmito dvěma řetězci existuje silná podobnost (pokud jde o jejich hodnoty Soundex).
Pokud vás zajímá, kde je číslo 4
pochází z, podívejte se na následující kód:
SELECT SOUNDEX('Two') AS Two, SOUNDEX('Too') AS Too;
Výsledek:
Two Too ---- ---- T000 T000
V tomto příkladu SOUNDEX()
Funkce se používá k vrácení kódů Soundex pro každé slovo. Jak se ukázalo, obě slova mají stejné kódy Soundex (T000
). A protože všechny čtyři znaky kódů Soundex jsou stejné, DIFFERENCE()
vrátí 4
.
Příklad – Nízká podobnost
Zde je příklad toho, jak to funguje, když mají řetězce nižší podobnost:
SELECT DIFFERENCE('Tea','Coffee');
Výsledek:
2
Výsledek je 2
, který je uprostřed. Struny nezní úplně stejně, ale mají určité podobnosti.
A stejně jako v předchozím příkladu můžeme zjistit, odkud tento výsledek pochází spuštěním následujícího kódu:
SELECT SOUNDEX('Tea') AS Tea, SOUNDEX('Coffee') AS Coffee;
Výsledek:
Tea Coffee ---- ------ T000 C100
Můžeme tedy vidět, že pouze dva znaky Soundex jsou mezi těmito slovy stejné. Proto DIFFERENCE()
výsledek je 2
.
Příklad – žádná podobnost
Zde je příklad toho, jak to funguje, když mají řetězce slabou nebo žádnou podobnost:
SELECT DIFFERENCE('Tree','Captivated');
Výsledek:
0
Výsledek je 0
, což znamená, že řetězce mají velmi slabou nebo žádnou podobnost.
A zde jsou kódy Soundex pro tato dvě slova:
SELECT SOUNDEX('Tree') AS Tree, SOUNDEX('Captivated') AS Captivated;
Výsledek:
Tree Captivated ---- ---------- T600 C131
V tomto případě tedy žádný ze znaků není stejný, proto DIFFERENCE()
výsledek 0
.