In MariaDB, SOUNDEX()
is een ingebouwde tekenreeksfunctie die de Soundex-reeks van een bepaalde reeks retourneert.
Soundex is een fonetisch algoritme voor het indexeren van namen op geluid, zoals uitgesproken in het Engels. Als twee woorden hetzelfde klinken, moeten ze dezelfde Soundex-snaar hebben. Als twee woorden hetzelfde klinken, maar niet precies hetzelfde, kan hun Soundex-snaar er hetzelfde uitzien, maar niet precies hetzelfde.
De functie accepteert één argument:de tekenreeks waarvan de Soundex-reeks moet worden geretourneerd.
Syntaxis
De syntaxis gaat als volgt:
SOUNDEX(str)
Waar str
is de tekenreeks waarvan de Soundex-reeks moet worden geretourneerd.
Voorbeeld
Hier is een eenvoudig voorbeeld:
SELECT SOUNDEX('Bat');
Resultaat:
+----------------+ | SOUNDEX('Bat') | +----------------+ | B300 | +----------------+
Hier is nog een voorbeeld dat de Soundex-reeks vergelijkt die wordt geretourneerd door vergelijkbare, maar verschillende, klinkende woorden:
SELECT
SOUNDEX('Bat'),
SOUNDEX('Cat'),
SOUNDEX('Cap');
Resultaat:
+----------------+----------------+----------------+ | SOUNDEX('Bat') | SOUNDEX('Cat') | SOUNDEX('Cap') | +----------------+----------------+----------------+ | B300 | C300 | C100 | +----------------+----------------+----------------+
En hier is er een die woorden vergelijkt die niet hetzelfde klinken:
SELECT
SOUNDEX('Apartment'),
SOUNDEX('Vehicle'),
SOUNDEX('Groceries');
Resultaat:
+----------------------+--------------------+----------------------+ | SOUNDEX('Apartment') | SOUNDEX('Vehicle') | SOUNDEX('Groceries') | +----------------------+--------------------+----------------------+ | A16353 | V240 | G6262 | +----------------------+--------------------+----------------------+
Ik moet vermelden dat deze functie het originele Soundex-algoritme implementeert dat eerst klinkers weggooit en als tweede dupliceert. Dit in tegenstelling tot de verbeterde versie, die eerst de dubbele en de tweede de klinkers weggooit.
Een standaard Soundex-tekenreeks is ook vier tekens lang, maar MariaDB's SOUNDEX()
functie retourneert een willekeurig lange tekenreeks. Daarom zijn de bovenstaande resultaten inclusief niet-standaard Soundex-snaren.
Om te illustreren wat ik bedoel, hier is het resultaat dat ik krijg bij het gebruik van Oracle's SOUNDEX()
functie om hetzelfde te doen:
SELECT
SOUNDEX('Apartment'),
SOUNDEX('Vehicle'),
SOUNDEX('Groceries')
FROM DUAL;
Resultaat:
SOUNDEX('APARTMENT') SOUNDEX('VEHICLE') SOUNDEX('GROCERIES') _______________________ _____________________ _______________________ A163 V240 G626
Exacte overeenkomsten
Hier is een voorbeeld van woordparen die een overeenkomende Soundex-string hebben, ook al zijn het verschillende woorden, met verschillende betekenissen:
SELECT
SOUNDEX('Dam') AS Dam,
SOUNDEX('Damn') AS Damn,
SOUNDEX('Too') AS Too,
SOUNDEX('Two') AS Two;
Resultaat:
+------+------+------+------+ | Dam | Damn | Too | Two | +------+------+------+------+ | D500 | D500 | T000 | T000 | +------+------+------+------+
Databasevoorbeeld
Hier is een voorbeeld van het ophalen van de Soundex-string uit een databasequery:
SELECT
PetName,
SOUNDEX(PetName)
FROM Pets;
Resultaat:
+---------+------------------+ | PetName | SOUNDEX(PetName) | +---------+------------------+ | Fluffy | F410 | | Fetch | F320 | | Scratch | S632 | | Wag | W200 | | Tweet | T000 | | Fluffy | F410 | | Bark | B620 | | Meow | M000 | +---------+------------------+
We kunnen ook SOUNDEX()
. gebruiken in een WHERE
clausule om alleen die rijen terug te geven die als een bepaald woord klinken:
SELECT
PetName,
SOUNDEX(PetName),
SOUNDEX('Wagg')
FROM Pets
WHERE SOUNDEX(PetName) = SOUNDEX('Wagg');
Resultaat:
+---------+------------------+-----------------+ | PetName | SOUNDEX(PetName) | SOUNDEX('Wagg') | +---------+------------------+-----------------+ | Wag | W200 | W200 | +---------+------------------+-----------------+
Het is echter mogelijk dat u liever SOUNDS LIKE
. gebruikt in plaats daarvan, wat een beknoptere manier is om hetzelfde te doen.
Lege string
Dit is wat er gebeurt als een lege string wordt doorgegeven voor elk gegeven argument:
SELECT SOUNDEX('');
Resultaat:
+-------------+ | SOUNDEX('') | +-------------+ | | +-------------+
Nullargumenten
Doorgeven van null
retourneert null
:
SELECT SOUNDEX(null);
Resultaat:
+---------------+ | SOUNDEX(null) | +---------------+ | NULL | +---------------+
Ontbrekend argument
SOUNDEX()
. aanroepen met het verkeerde aantal argumenten, of zonder het doorgeven van argumenten resulteert in een fout:
SELECT SOUNDEX();
Resultaat:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'SOUNDEX'