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.

Vous pouvez utiliser cette fonction pour déterminer si deux chaînes (par exemple les noms de famille Levine et Lavine, les mots to et too, etc.) ont des prononciations similaires en langue anglaise.

Cette fonction utilise l’algorithme phonétique Soundex, qui est décrit dans Soundex System. Notez cependant que Snowflake ne prévoit pas de traitement spécial pour les préfixes de nom de famille (par ex. « Van », « De », « La », etc.).

SOUNDEX('Pfister') renvoie P236. Comme les deux premières lettres (P et f) sont adjacentes et partagent le même numéro de code Soundex (1), la fonction ignore le numéro de code Soundex de la deuxième lettre.

Certains systèmes de bases de données (par exemple Teradata) utilisent une variante qui conserve le numéro de code Soundex pour la deuxième lettre lorsque la première et la deuxième lettre utilisent le même numéro. Pour cette variante, la chaîne pour Pfister est P123 (et non P236). Pour utiliser cette variante, appelez la fonction SOUNDEX_P123 à la place.

Voir aussi :

SOUNDEX_P123

Syntaxe

SOUNDEX( <varchar_expr> )
Copy

Arguments

varchar_expr

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.

Remarques :

  • 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 Wikipédia).

  • Comme indiqué précédemment, si vous souhaitez utiliser la variante qui conserve le numéro de code Soundex pour la deuxième lettre lorsque la première et la deuxième lettre utilisent le même numéro, appelez plutôt la fonction SOUNDEX_P123.

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                                     |
    +----------------------------------------+--------------------------+------------------------------------------+
    
    Copy

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            |
+------------------+-----------------+
Copy

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');
Copy

Rechercher des enregistrements associés sans SOUNDEX :

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

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 |
+--------+--------+
Copy