V MariaDB, SOUNDEX()
je vestavěná funkce řetězce, která vrací řetězec Soundex z daného řetězce.
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ě.
Funkce přijímá jeden argument:řetězec, pro který má být vrácen řetězec Soundex.
Syntaxe
Syntaxe vypadá takto:
SOUNDEX(str)
Kde str
je řetězec, pro který se má vrátit řetězec Soundex.
Příklad
Zde je základní příklad:
SELECT SOUNDEX('Bat');
Výsledek:
+-----------------+| SOUNDEX('Bat') |+-----------------+| B300 |+----------------+
Zde je další příklad, který porovnává řetězec Soundex vrácený z podobně, ale odlišně znějících slov:
SELECT
SOUNDEX('Bat'),
SOUNDEX('Cat'),
SOUNDEX('Cap');
Výsledek:
+----------------+----------------+------------- ----+| SOUNDEX('Bat') | SOUNDEX('Kočka') | SOUNDEX('Cap') |+----------------+----------------+-------- --------+| B300 | C300 | C100 |+----------------+----------------+------------- ---+
A tady je jeden, který porovnává slova, která neznějí stejně:
SELECT
SOUNDEX('Apartment'),
SOUNDEX('Vehicle'),
SOUNDEX('Groceries');
Výsledek:
+----------------------+--------------------+-- ---------------------+| SOUNDEX('Apartmán') | SOUNDEX('Vehicle') | SOUNDEX('Potraviny') |+----------------------+------------------- -+-----------------------+| A16353 | V240 | G6262 |+----------------------+--------------------+--- -------------------+
Měl bych zmínit, že tato funkce implementuje původní algoritmus Soundex, který nejprve zahazuje samohlásky a jako druhý duplikuje. To je v kontrastu s vylepšenou verzí, která nejprve zahodí duplikáty a jako druhé samohlásky.
Standardní řetězec Soundex má také čtyři znaky, ale MariaDB SOUNDEX()
funkce vrací libovolně dlouhý řetězec. Proto výše uvedené výsledky zahrnují nestandardní struny Soundex.
Abych ilustroval, co tím myslím, zde je výsledek, který dostanu při použití SOUNDEX()
společnosti Oracle funkce pro totéž:
SELECT
SOUNDEX('Apartment'),
SOUNDEX('Vehicle'),
SOUNDEX('Groceries')
FROM DUAL;
Výsledek:
SOUNDEX('APARTMENT') SOUNDEX('VEHICLE') SOUNDEX('POTRAVINY') _______________________ _______________________ _______________6 A2_4___6 APřesné shody
Zde je příklad párů slov, která mají shodný řetězec Soundex, i když jde o různá slova s různými významy:
SELECT SOUNDEX('Dam') AS Dam, SOUNDEX('Damn') AS Damn, SOUNDEX('Too') AS Too, SOUNDEX('Two') AS Two;
Výsledek:
+------+------+------+------+| Přehrada | Sakra | taky | Dva |+------+------+------+------+| D500 | D500 | T000 | T000 |+------+------+------+------+Příklad databáze
Zde je příklad získání řetězce Soundex z databázového dotazu:
SELECT PetName, SOUNDEX(PetName) FROM Pets;
Výsledek:
+---------+------------------+| Jméno mazlíčka | SOUNDEX(jméno mazlíčka) |+---------+------------------+| Načechraný | F410 || Načíst | F320 || Škrábnout | S632 || Wag | W200 || Tweet | T000 || Načechraný | F410 || Kůra | B620 || Mňau | M000 |+---------+------------------+Můžeme také použít
SOUNDEX()
vWHERE
klauzule pro vrácení pouze těch řádků, které znějí jako dané slovo:SELECT PetName, SOUNDEX(PetName), SOUNDEX('Wagg') FROM Pets WHERE SOUNDEX(PetName) = SOUNDEX('Wagg');
Výsledek:
+---------+-----------------+----------------- +| Jméno mazlíčka | SOUNDEX(jméno domácího mazlíčka) | SOUNDEX('Wagg') |+---------+------------------+------------- ----+| Wag | W200 | W200 |+---------+------------------+-----------------+Můžete však raději použít
SOUNDS LIKE
místo toho, což je stručnější způsob, jak udělat totéž.Prázdný řetězec
Co se stane, když je pro každý daný argument předán prázdný řetězec:
SELECT SOUNDEX('');
Výsledek:
+--------------+| SOUNDEX('') |+-------------+| |+-------------+Nulové argumenty
Předávání
null
vrátínull
:SELECT SOUNDEX(null);
Výsledek:
+----------------+| SOUNDEX(null) |+---------------+| NULL |+---------------+Chybí argument
Volání
SOUNDEX()
s nesprávným počtem argumentů nebo bez předání jakýchkoli argumentů vede k chybě:SELECT SOUNDEX();
Výsledek:
CHYBA 1582 (42000):Nesprávný počet parametrů ve volání nativní funkce 'SOUNDEX'