В MariaDB можете да използвате SOUNDS LIKE
в заявка за съвпадение на думи, които звучат еднакво.
Синтаксис
Синтаксисът е така:
expr1 SOUNDS LIKE expr2
Това е същото като да направите това:SOUNDEX(expr1) = SOUNDEX(expr2)
.
Soundex е фонетичен алгоритъм за индексиране на имена по звук, както се произнася на английски. Ако две думи звучат еднакво, те трябва да имат същия низ на Soundex. Ако две думи звучат сходно, но не съвсем еднакво, техният низ на Soundex може да изглежда подобно, но не съвсем същото.
Пример
Ето един основен пример:
SELECT 'Two' SOUNDS LIKE 'Too';
Резултат:
+-------------------------+ | 'Two' SOUNDS LIKE 'Too' | +-------------------------+ | 1 | +-------------------------+
В този случай двете думи звучат еднакво.
Можем да използваме SOUNDEX()
функция за връщане на Soundex низа на всяка дума:
SELECT
SOUNDEX('Two'),
SOUNDEX('Too');
Резултат:
+----------------+----------------+ | SOUNDEX('Two') | SOUNDEX('Too') | +----------------+----------------+ | T000 | T000 | +----------------+----------------+
Струните на Soundex са идентични. Ето защо SOUNDS LIKE
върна 1
.
Няма съвпадение
Ето пример за две думи, които не звучат еднакво:
SELECT 'Cat' SOUNDS LIKE 'Dog';
Резултат:
+-------------------------+ | 'Cat' SOUNDS LIKE 'Dog' | +-------------------------+ | 0 | +-------------------------+
В този случай имаме 0
, защото думите не звучат еднакво. Предполага се, че техните Soundex струни са различни. Нека разберем:
SELECT
SOUNDEX('Cat'),
SOUNDEX('Dog');
Резултат:
+----------------+----------------+ | SOUNDEX('Cat') | SOUNDEX('Dog') | +----------------+----------------+ | C300 | D200 | +----------------+----------------+
да. Различни струни на Soundex.
Пример за база данни
Ето пример за използване на SOUNDS LIKE
в WHERE
клауза на заявка за база данни:
SELECT
PetName,
SOUNDEX(PetName),
SOUNDEX('Wagg')
FROM Pets
WHERE PetName SOUNDS LIKE 'Wagg';
Резултат:
+---------+------------------+-----------------+ | PetName | SOUNDEX(PetName) | SOUNDEX('Wagg') | +---------+------------------+-----------------+ | Wag | W200 | W200 | +---------+------------------+-----------------+
Тук той използва SOUNDEX()
функция, за да направи същото:
SELECT
PetName,
SOUNDEX(PetName),
SOUNDEX('Wagg')
FROM Pets
WHERE SOUNDEX(PetName) = SOUNDEX('Wagg');
Резултат:
+---------+------------------+-----------------+ | PetName | SOUNDEX(PetName) | SOUNDEX('Wagg') | +---------+------------------+-----------------+ | Wag | W200 | W200 | +---------+------------------+-----------------+