В MariaDB, SOUNDEX()
е вградена низова функция, която връща низа на Soundex от даден низ.
Soundex е фонетичен алгоритъм за индексиране на имена по звук, както се произнася на английски. Ако две думи звучат еднакво, те трябва да имат същия низ на Soundex. Ако две думи звучат сходно, но не съвсем еднакво, техният низ на Soundex може да изглежда подобно, но не съвсем същото.
Функцията приема един аргумент:низът, от който да върне низа на Soundex.
Синтаксис
Синтаксисът е така:
SOUNDEX(str)
Където str
е низът, от който да се върне низът на Soundex.
Пример
Ето един основен пример:
SELECT SOUNDEX('Bat');
Резултат:
+----------------+ | SOUNDEX('Bat') | +----------------+ | B300 | +----------------+
Ето още един пример, който сравнява низа на Soundex, върнат от подобни, но различни, звучащи думи:
SELECT
SOUNDEX('Bat'),
SOUNDEX('Cat'),
SOUNDEX('Cap');
Резултат:
+----------------+----------------+----------------+ | SOUNDEX('Bat') | SOUNDEX('Cat') | SOUNDEX('Cap') | +----------------+----------------+----------------+ | B300 | C300 | C100 | +----------------+----------------+----------------+
И ето една, която сравнява думи, които не звучат еднакво:
SELECT
SOUNDEX('Apartment'),
SOUNDEX('Vehicle'),
SOUNDEX('Groceries');
Резултат:
+----------------------+--------------------+----------------------+ | SOUNDEX('Apartment') | SOUNDEX('Vehicle') | SOUNDEX('Groceries') | +----------------------+--------------------+----------------------+ | A16353 | V240 | G6262 | +----------------------+--------------------+----------------------+
Трябва да спомена, че тази функция имплементира оригиналния алгоритъм на Soundex, който първо изхвърля гласните и второ дублира. Това е в контраст с подобрената версия, която отхвърля първо дубликатите и второ гласните.
Също така стандартният низ на Soundex е дълъг четири знака, но SOUNDEX()
на MariaDB функцията връща произволно дълъг низ. Следователно горните резултати включват нестандартни струни на Soundex.
За да илюстрирам какво имам предвид, ето резултата, който получавам, когато използвам SOUNDEX()
на Oracle функция, за да направи същото:
SELECT
SOUNDEX('Apartment'),
SOUNDEX('Vehicle'),
SOUNDEX('Groceries')
FROM DUAL;
Резултат:
SOUNDEX('APARTMENT') SOUNDEX('VEHICLE') SOUNDEX('GROCERIES') _______________________ _____________________ _______________________ A163 V240 G626
Точни съвпадения
Ето пример за двойки думи, които имат съвпадащ низ на Soundex, въпреки че са различни думи, с различни значения:
SELECT
SOUNDEX('Dam') AS Dam,
SOUNDEX('Damn') AS Damn,
SOUNDEX('Too') AS Too,
SOUNDEX('Two') AS Two;
Резултат:
+------+------+------+------+ | Dam | Damn | Too | Two | +------+------+------+------+ | D500 | D500 | T000 | T000 | +------+------+------+------+
Пример за база данни
Ето пример за получаване на низа на Soundex от заявка за база данни:
SELECT
PetName,
SOUNDEX(PetName)
FROM Pets;
Резултат:
+---------+------------------+ | PetName | SOUNDEX(PetName) | +---------+------------------+ | Fluffy | F410 | | Fetch | F320 | | Scratch | S632 | | Wag | W200 | | Tweet | T000 | | Fluffy | F410 | | Bark | B620 | | Meow | M000 | +---------+------------------+
Можем също да използваме SOUNDEX()
в WHERE
клауза за връщане само на онези редове, които звучат като дадена дума:
SELECT
PetName,
SOUNDEX(PetName),
SOUNDEX('Wagg')
FROM Pets
WHERE SOUNDEX(PetName) = SOUNDEX('Wagg');
Резултат:
+---------+------------------+-----------------+ | PetName | SOUNDEX(PetName) | SOUNDEX('Wagg') | +---------+------------------+-----------------+ | Wag | W200 | W200 | +---------+------------------+-----------------+
Въпреки това, може да предпочетете да използвате SOUNDS LIKE
вместо това, което е по-сбит начин да направите същото.
Празен низ
Ето какво се случва, когато се подаде празен низ за всеки даден аргумент:
SELECT SOUNDEX('');
Резултат:
+-------------+ | SOUNDEX('') | +-------------+ | | +-------------+
Нулеви аргументи
Предаването на null
връща null
:
SELECT SOUNDEX(null);
Резултат:
+---------------+ | SOUNDEX(null) | +---------------+ | NULL | +---------------+
Липсващ аргумент
Извикване на SOUNDEX()
с грешен брой аргументи или без подаване на аргументи води до грешка:
SELECT SOUNDEX();
Резултат:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'SOUNDEX'