Catégories :

Fonctions de chaîne et fonctions binaires

SOUNDEX

Renvoie une chaîne contenant une représentation phonétique de la chaîne d’entrée.

Cette fonction est généralement utilisée pour déterminer si deux chaînes, telles que les noms de famille Levine et Lavine, ou les mots to et too, ont une prononciation similaire en langue anglaise.

Syntaxe

SOUNDEX( <varchar_expr> )

Arguments

expr_varchar

La chaîne pour laquelle une représentation de la prononciation est renvoyée. La chaîne doit utiliser le jeu de caractères latin ou unicode.

Renvoie

La valeur renvoyée est un VARCHAR qui contient la représentation phonétique de la chaîne d’entrée. En d’autres termes, la valeur de retour est une chaîne (pas un son) qui représente la prononciation, plutôt que l’orthographe, de la chaîne d’entrée.

La valeur renvoyée commence par une lettre représentant la première lettre de la chaîne, suivie de 3 chiffres (par exemple, s400, c130).

Pour plus d’informations sur le calcul de la valeur de retour, voir l’ algorithme phonétique Soundex (sur Wikipedia).

Notes sur l’utilisation

  • Comme la fonction ne renvoie que quatre caractères (une lettre et trois chiffres), la sortie est principalement déterminée par les quelques premières syllabes de l’entrée, plutôt que par la chaîne entière.

    Par exemple, l’instruction suivante compare trois chaînes et renvoie la même valeur SOUNDEX pour chaque chaîne car, même si leur orthographe et leur signification sont complètement différentes, elles commencent par des syllabes phonétiquement similaires :

    SELECT SOUNDEX('I love rock and roll music.'),
           SOUNDEX('I love rocks and gemstones.'),
           SOUNDEX('I leave a rock wherever I go.');
    +----------------------------------------+--------------------------+------------------------------------------+
    | SOUNDEX('I LOVE ROCK AND ROLL MUSIC.') | SOUNDEX('I LOVE ROCKS.') | SOUNDEX('I LEAVE A ROCK WHEREVER I GO.') |
    |----------------------------------------+--------------------------+------------------------------------------|
    | I416                                   | I416                     | I416                                     |
    +----------------------------------------+--------------------------+------------------------------------------+
    

Exemples

La requête suivante renvoie les valeurs SOUNDEX de deux noms orthographiés différemment, mais généralement prononcés de la même manière :

SELECT SOUNDEX('Marks'), SOUNDEX('Marx');
+------------------+-----------------+
| SOUNDEX('MARKS') | SOUNDEX('MARX') |
|------------------+-----------------|
| M620             | M620            |
+------------------+-----------------+

La requête suivante montre comment utiliser SOUNDEX pour rechercher des lignes potentiellement associées dans différentes tables :

Créer et charger les tables :

CREATE TABLE sounding_board (v VARCHAR);
CREATE TABLE sounding_bored (v VARCHAR);
INSERT INTO sounding_board (v) VALUES ('Marsha');
INSERT INTO sounding_bored (v) VALUES ('Marcia');

Rechercher des enregistrements associés sans SOUNDEX :

SELECT * 
    FROM sounding_board AS board, sounding_bored AS bored 
    WHERE bored.v = board.v;
+---+---+
| V | V |
|---+---|
+---+---+

Rechercher des enregistrements associés en utilisant SOUNDEX :

SELECT * 
    FROM sounding_board AS board, sounding_bored AS bored 
    WHERE SOUNDEX(bored.v) = SOUNDEX(board.v);
+--------+--------+
| V      | V      |
|--------+--------|
| Marsha | Marcia |
+--------+--------+