I MariaDB, SOUNDEX()
är en inbyggd strängfunktion som returnerar Soundex-strängen från en given sträng.
Soundex är en fonetisk algoritm för att indexera namn efter ljud, som uttalas på engelska. Om två ord låter likadana bör de ha samma Soundex-sträng. Om två ord låter lika, men inte exakt likadana, kan deras Soundex-sträng se likadana ut men inte exakt likadana.
Funktionen accepterar ett argument:strängen som Soundex-strängen ska returneras från.
Syntax
Syntaxen ser ut så här:
SOUNDEX(str)
Där str
är strängen som Soundex-strängen ska returneras från.
Exempel
Här är ett grundläggande exempel:
SELECT SOUNDEX('Bat');
Resultat:
+----------------+ | SOUNDEX('Bat') | +----------------+ | B300 | +----------------+
Här är ett annat exempel som jämför Soundex-strängen som returneras från liknande, men olika, klingande ord:
SELECT
SOUNDEX('Bat'),
SOUNDEX('Cat'),
SOUNDEX('Cap');
Resultat:
+----------------+----------------+----------------+ | SOUNDEX('Bat') | SOUNDEX('Cat') | SOUNDEX('Cap') | +----------------+----------------+----------------+ | B300 | C300 | C100 | +----------------+----------------+----------------+
Och här är en som jämför ord som inte låter likadana:
SELECT
SOUNDEX('Apartment'),
SOUNDEX('Vehicle'),
SOUNDEX('Groceries');
Resultat:
+----------------------+--------------------+----------------------+ | SOUNDEX('Apartment') | SOUNDEX('Vehicle') | SOUNDEX('Groceries') | +----------------------+--------------------+----------------------+ | A16353 | V240 | G6262 | +----------------------+--------------------+----------------------+
Jag bör nämna att den här funktionen implementerar den ursprungliga Soundex-algoritmen som kasserar vokaler först och duplicerar sedan. Detta i motsats till den förbättrade versionen, som kasserar dubbletter först och vokaler andra.
Dessutom är en standard Soundex-sträng fyra tecken lång, men MariaDB:s SOUNDEX()
funktion returnerar en godtyckligt lång sträng. Därför inkluderar ovanstående resultat icke-standardiserade Soundex-strängar.
För att illustrera vad jag menar, här är resultatet som jag får när jag använder Oracles SOUNDEX()
funktion för att göra samma sak:
SELECT
SOUNDEX('Apartment'),
SOUNDEX('Vehicle'),
SOUNDEX('Groceries')
FROM DUAL;
Resultat:
SOUNDEX('APARTMENT') SOUNDEX('VEHICLE') SOUNDEX('GROCERIES') _______________________ _____________________ _______________________ A163 V240 G626
Exakta matchningar
Här är ett exempel på ordpar som har en matchande Soundex-sträng, även om de är olika ord, med olika betydelser:
SELECT
SOUNDEX('Dam') AS Dam,
SOUNDEX('Damn') AS Damn,
SOUNDEX('Too') AS Too,
SOUNDEX('Two') AS Two;
Resultat:
+------+------+------+------+ | Dam | Damn | Too | Two | +------+------+------+------+ | D500 | D500 | T000 | T000 | +------+------+------+------+
Databasexempel
Här är ett exempel på hur du hämtar Soundex-strängen från en databasfråga:
SELECT
PetName,
SOUNDEX(PetName)
FROM Pets;
Resultat:
+---------+------------------+ | PetName | SOUNDEX(PetName) | +---------+------------------+ | Fluffy | F410 | | Fetch | F320 | | Scratch | S632 | | Wag | W200 | | Tweet | T000 | | Fluffy | F410 | | Bark | B620 | | Meow | M000 | +---------+------------------+
Vi kan också använda SOUNDEX()
i en WHERE
sats för att endast returnera de rader som låter som ett givet ord:
SELECT
PetName,
SOUNDEX(PetName),
SOUNDEX('Wagg')
FROM Pets
WHERE SOUNDEX(PetName) = SOUNDEX('Wagg');
Resultat:
+---------+------------------+-----------------+ | PetName | SOUNDEX(PetName) | SOUNDEX('Wagg') | +---------+------------------+-----------------+ | Wag | W200 | W200 | +---------+------------------+-----------------+
Men du kanske föredrar att använda SOUNDS LIKE
istället, vilket är ett mer kortfattat sätt att göra samma sak.
Töm sträng
Så här händer när en tom sträng skickas för varje givet argument:
SELECT SOUNDEX('');
Resultat:
+-------------+ | SOUNDEX('') | +-------------+ | | +-------------+
Nollargument
Skickar null
returnerar null
:
SELECT SOUNDEX(null);
Resultat:
+---------------+ | SOUNDEX(null) | +---------------+ | NULL | +---------------+
Argument saknas
Anropar SOUNDEX()
med fel antal argument, eller utan att skicka några argument resulterar i ett fel:
SELECT SOUNDEX();
Resultat:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'SOUNDEX'