Тази статия има за цел да ви помогне да разберете DIFFERENCE()
функция, която е T-SQL функция, налична в SQL Server, Azure и др.
Ключът към разбирането на DIFFERENCE()
функцията е да се разбере как работи Soundex (или в контекста на SQL Server, как SOUNDEX()
функцията работи). Това е така, защото DIFFERENCE()
функцията връща разликата между стойностите на Soundex между два низа.
Стойността на Soundex е дълга четири знака. Ако две думи звучат еднакво, те ще споделят една и съща стойност на Soundex от четири знака. Ако звучат подобно (но не еднакво), техните Soundex стойности може да споделят някои знаци, но не всички. Например, техните стойности на Soundex може да имат два еднакви знака и два различни. Ако две думи звучат напълно различно, нито един от знаците в съответните им стойности на Soundex няма да е същият.
DIFFERENCE()
функцията връща стойност, която варира от 0
чрез 4
. Тази стойност представлява броя на знаците в стойностите на Soundex, които са еднакви. 0
показва слабо или никакво сходство и 4
показва силно сходство или едни и същи стойности.
Синтаксис
Първо, ето синтаксиса:
DIFFERENCE ( character_expression , character_expression )
Както е посочено, тази функция приема два аргумента. Soundex кодовете на всеки символен израз се сравняват и резултатът се връща.
Пример – Точно съвпадение
Ето пример за това какво се случва, когато и двете струни звучат еднакво (т.е. имат една и съща стойност на Soundex):
SELECT DIFFERENCE('Two','Too');
Резултат:
4
Резултатът е 4
, което е най-високата възможна стойност. Това означава, че има голяма прилика между двата низа (доколкото техните стойности на Soundex).
Ако се чудите къде е числото 4
от, вижте следния код:
SELECT SOUNDEX('Two') AS Two, SOUNDEX('Too') AS Too;
Резултат:
Two Too ---- ---- T000 T000
В този пример SOUNDEX()
функцията се използва за връщане на Soundex кодовете за всяка дума. Както се оказва, и двете думи имат едни и същи Soundex кодове (T000
). И тъй като всичките четири знака от кодовете на Soundex са еднакви, DIFFERENCE()
връща 4
.
Пример – Ниско сходство
Ето пример за това как работи, когато низовете имат по-малко сходство:
SELECT DIFFERENCE('Tea','Coffee');
Резултат:
2
Резултатът е 2
, което е в средата. Струните не звучат съвсем еднакво, но имат някои прилики.
И както в предишния пример, можем да видим откъде идва този резултат, като изпълним следния код:
SELECT SOUNDEX('Tea') AS Tea, SOUNDEX('Coffee') AS Coffee;
Резултат:
Tea Coffee ---- ------ T000 C100
Така че можем да видим, че само два от знаците на Soundex са еднакви между тези думи. Следователно DIFFERENCE()
резултатът е 2
.
Пример – Няма сходство
Ето пример за това как работи, когато низовете имат слаба или никаква прилика:
SELECT DIFFERENCE('Tree','Captivated');
Резултат:
0
Резултатът е 0
, което означава, че низовете имат много слабо или никакво сходство.
А ето и кодовете на Soundex за тези две думи:
SELECT SOUNDEX('Tree') AS Tree, SOUNDEX('Captivated') AS Captivated;
Резултат:
Tree Captivated ---- ---------- T600 C131
Така че в този случай нито един от знаците не е еднакъв, следователно DIFFERENCE()
резултат от 0
.