V MariaDB můžete použít SOUNDS LIKE
v dotazu, aby odpovídala slovům, která znějí podobně.
Syntaxe
Syntaxe vypadá takto:
expr1 SOUNDS LIKE expr2
Je to stejné jako toto:SOUNDEX(expr1) = SOUNDEX(expr2)
.
Soundex je fonetický algoritmus pro indexování jmen podle zvuku, jak se vyslovuje v angličtině. Pokud dvě slova znějí stejně, měla by mít stejný řetězec Soundex. Pokud dvě slova znějí podobně, ale ne úplně stejně, jejich řetězec Soundex může vypadat podobně, ale ne úplně stejně.
Příklad
Zde je základní příklad:
SELECT 'Two' SOUNDS LIKE 'Too';
Výsledek:
+-------------------------+ | 'Two' SOUNDS LIKE 'Too' | +-------------------------+ | 1 | +-------------------------+
V tomto případě znějí obě slova stejně.
Můžeme použít SOUNDEX()
funkce pro vrácení řetězce Soundex každého slova:
SELECT
SOUNDEX('Two'),
SOUNDEX('Too');
Výsledek:
+----------------+----------------+ | SOUNDEX('Two') | SOUNDEX('Too') | +----------------+----------------+ | T000 | T000 | +----------------+----------------+
Struny Soundex jsou identické. To je důvod, proč SOUNDS LIKE
vrátil 1
.
Žádná shoda
Zde je příklad dvou slov, která neznějí stejně:
SELECT 'Cat' SOUNDS LIKE 'Dog';
Výsledek:
+-------------------------+ | 'Cat' SOUNDS LIKE 'Dog' | +-------------------------+ | 0 | +-------------------------+
V tomto případě máme 0
, protože slova neznějí stejně. Jejich struny Soundex jsou pravděpodobně jiné. Pojďme to zjistit:
SELECT
SOUNDEX('Cat'),
SOUNDEX('Dog');
Výsledek:
+----------------+----------------+ | SOUNDEX('Cat') | SOUNDEX('Dog') | +----------------+----------------+ | C300 | D200 | +----------------+----------------+
Ano. Různé struny Soundex.
Příklad databáze
Zde je příklad použití SOUNDS LIKE
v WHERE
klauzule databázového dotazu:
SELECT
PetName,
SOUNDEX(PetName),
SOUNDEX('Wagg')
FROM Pets
WHERE PetName SOUNDS LIKE 'Wagg';
Výsledek:
+---------+------------------+-----------------+ | PetName | SOUNDEX(PetName) | SOUNDEX('Wagg') | +---------+------------------+-----------------+ | Wag | W200 | W200 | +---------+------------------+-----------------+
Zde se používá SOUNDEX()
funkce pro totéž:
SELECT
PetName,
SOUNDEX(PetName),
SOUNDEX('Wagg')
FROM Pets
WHERE SOUNDEX(PetName) = SOUNDEX('Wagg');
Výsledek:
+---------+------------------+-----------------+ | PetName | SOUNDEX(PetName) | SOUNDEX('Wagg') | +---------+------------------+-----------------+ | Wag | W200 | W200 | +---------+------------------+-----------------+