Een van de vele MySQL-tekenreeksfuncties is de SOUNDEX()
functie. Deze functie retourneert een Soundex-string van een gegeven string. 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.
Dit artikel bevat een aantal Soundex-voorbeelden om te demonstreren hoe de SOUNDEX()
functie werkt in MySQL.
Syntaxis
Laten we eerst eens kijken naar de syntaxis:
SOUNDEX(str)
Waar str
is de snaar waaraan u de Soundex-snaar nodig hebt.
Voorbeeld
Hier is een voorbeeld van het ophalen van de Soundex-string uit een string:
SELECT SOUNDEX('Sure');
Resultaat:
+-----------------+ | SOUNDEX('Sure') | +-----------------+ | S600 | +-----------------+
Dus in dit geval het woord Sure
heeft een Soundex-string van S600
.
Voorbeeld – Exacte overeenkomst
Hier is een voorbeeld van waar twee woorden hetzelfde klinken (of erg op elkaar lijken), en daarom delen ze dezelfde Soundex-snaar:
SELECT SOUNDEX('Sure') AS Sure, SOUNDEX('Shore') AS Shore;
Resultaat:
+------+-------+ | Sure | Shore | +------+-------+ | S600 | S600 | +------+-------+
Hier zijn wat meer exacte matchvoorbeelden:
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 | +------+------+------+------+
Voorbeeld – Niet-overeenkomend
Hier is een voorbeeld van waar twee woorden niet hetzelfde klinken en daarom verschillende Soundex-snaren hebben:
SELECT SOUNDEX('Water') AS Water, SOUNDEX('Coffee') AS Coffee;
Resultaat:
+-------+--------+ | Water | Coffee | +-------+--------+ | W360 | C100 | +-------+--------+
Zoals je kunt zien, is de Soundex-snaar compleet anders voor deze twee woorden.
Voorbeeld – Verschillende spellingen
Hier is een voorbeeld van twee woorden die verschillend worden gespeld (afhankelijk van het land waar je vandaan komt):
SELECT SOUNDEX('Color') AS 'Color', SOUNDEX('Colour') AS 'Colour';
Resultaat:
+-------+--------+ | Color | Colour | +-------+--------+ | C460 | C460 | +-------+--------+
We kunnen dus zien dat dergelijke woorden dezelfde Soundex-reeks delen (zolang ze op dezelfde manier worden uitgesproken).
Voorbeeld – Hetzelfde geluid, andere Soundex
Er zijn gevallen waarin woorden hetzelfde klinken, maar ze hebben verschillende Soundex-snaren. De meest voorkomende reden hiervoor is dat ze met een andere letter beginnen, waaronder een stille letter. Het is je misschien opgevallen uit de vorige voorbeelden dat de Soundex-string begint met de eerste letter van de string.
Als je dus twee woorden hebt die precies hetzelfde worden uitgesproken, maar ze beginnen met een andere letter, hebben ze een andere Soundex-reeks.
Hier zijn enkele voorbeelden:
SELECT SOUNDEX('Hole') AS 'Hole', SOUNDEX('Whole') AS 'Whole', SOUNDEX('Our') AS Our, SOUNDEX('Hour') AS Hour;
Resultaat:
+------+-------+------+------+ | Hole | Whole | Our | Hour | +------+-------+------+------+ | H400 | W400 | O600 | H600 | +------+-------+------+------+
De paren in dit voorbeeld hebben verschillende Soundex-snaren, alleen omdat hun eerste letter anders is.
Voorbeeld – Soundex in een databasequery
Hier is een voorbeeld van het gebruik van SOUNDEX()
in een databasequery. In dit geval zijn we op zoek naar platen die klinken als "Ay See Dee Ci":
SELECT ArtistName FROM Artists WHERE SOUNDEX(ArtistName) = SOUNDEX('Ay See Dee Ci');
Resultaat:
+------------+ | ArtistName | +------------+ | AC/DC | +------------+
Dus AC/DC
heeft blijkbaar dezelfde Soundex-code als Ay See Dee Ci
(tenminste bij gebruik van MySQL) Voor de zekerheid, hier zijn de Soundex-codes voor beide strings:
SELECT SOUNDEX('AC/DC') AS 'AC/DC', SOUNDEX('Ay See Dee Ci') AS 'Ay See Dee Ci';
Resultaat:
+-------+---------------+ | AC/DC | Ay See Dee Ci | +-------+---------------+ | A232 | A232 | +-------+---------------+
Een alternatief:GELUIDEN ALS
Een alternatieve zoekopdracht had kunnen worden gemaakt met behulp van SOUNDS LIKE
in plaats van de SOUNDEX()
functie. Zoals dit:
SELECT ArtistName FROM Artists WHERE ArtistName SOUNDS LIKE 'Ay See Dee Ci';
Resultaat:
+------------+ | ArtistName | +------------+ | AC/DC | +------------+