MariaDB
 sql >> Base de données >  >> RDS >> MariaDB

Comment fonctionne SOUNDEX() dans MariaDB

Dans MariaDB, SOUNDEX() est une fonction de chaîne intégrée qui renvoie la chaîne Soundex à partir d'une chaîne donnée.

Soundex est un algorithme phonétique permettant d'indexer les noms par son, tel qu'il se prononce en anglais. Si deux mots ont le même son, ils doivent avoir la même chaîne Soundex. Si deux mots semblent similaires, mais pas exactement identiques, leur chaîne Soundex peut sembler similaire mais pas exactement identique.

La fonction accepte un argument :la chaîne pour laquelle renvoyer la chaîne Soundex.

Syntaxe

La syntaxe ressemble à ceci :

SOUNDEX(str)

str est la chaîne pour laquelle renvoyer la chaîne Soundex.

Exemple

Voici un exemple de base :

SELECT SOUNDEX('Bat');

Résultat :

+----------------+
| SOUNDEX('Bat') |
+----------------+
| B300           |
+----------------+

Voici un autre exemple qui compare la chaîne Soundex renvoyée par des mots similaires, mais différents :

SELECT 
    SOUNDEX('Bat'),
    SOUNDEX('Cat'),
    SOUNDEX('Cap');

Résultat :

+----------------+----------------+----------------+
| SOUNDEX('Bat') | SOUNDEX('Cat') | SOUNDEX('Cap') |
+----------------+----------------+----------------+
| B300           | C300           | C100           |
+----------------+----------------+----------------+

Et en voici une qui compare des mots qui ne se ressemblent pas :

SELECT 
    SOUNDEX('Apartment'),
    SOUNDEX('Vehicle'),
    SOUNDEX('Groceries');

Résultat :

+----------------------+--------------------+----------------------+
| SOUNDEX('Apartment') | SOUNDEX('Vehicle') | SOUNDEX('Groceries') |
+----------------------+--------------------+----------------------+
| A16353               | V240               | G6262                |
+----------------------+--------------------+----------------------+

Je dois mentionner que cette fonction implémente l'algorithme Soundex original qui supprime les voyelles en premier et les duplique en second. Cela contraste avec la version améliorée, qui supprime les doublons en premier et les voyelles en second.

De plus, une chaîne Soundex standard comporte quatre caractères, mais le SOUNDEX() de MariaDB La fonction renvoie une chaîne arbitrairement longue. Par conséquent, les résultats ci-dessus incluent des chaînes Soundex non standard.

Pour illustrer ce que je veux dire, voici le résultat que j'obtiens en utilisant Oracle SOUNDEX() fonction pour faire la même chose :

SELECT 
    SOUNDEX('Apartment'),
    SOUNDEX('Vehicle'),
    SOUNDEX('Groceries')
FROM DUAL;

Résultat :

   SOUNDEX('APARTMENT')    SOUNDEX('VEHICLE')    SOUNDEX('GROCERIES') 
_______________________ _____________________ _______________________ 
A163                    V240                  G626                   

Correspondances exactes

Voici un exemple de paires de mots qui ont une chaîne Soundex correspondante, même s'il s'agit de mots différents, avec des significations différentes :

SELECT 
    SOUNDEX('Dam') AS Dam, 
    SOUNDEX('Damn') AS Damn, 
    SOUNDEX('Too') AS Too, 
    SOUNDEX('Two') AS Two;

Résultat :

+------+------+------+------+
| Dam  | Damn | Too  | Two  |
+------+------+------+------+
| D500 | D500 | T000 | T000 |
+------+------+------+------+

Exemple de base de données

Voici un exemple d'obtention de la chaîne Soundex à partir d'une requête de base de données :

SELECT 
    PetName, 
    SOUNDEX(PetName)
FROM Pets;

Résultat :

+---------+------------------+
| PetName | SOUNDEX(PetName) |
+---------+------------------+
| Fluffy  | F410             |
| Fetch   | F320             |
| Scratch | S632             |
| Wag     | W200             |
| Tweet   | T000             |
| Fluffy  | F410             |
| Bark    | B620             |
| Meow    | M000             |
+---------+------------------+

On peut aussi utiliser SOUNDEX() dans un WHERE clause pour renvoyer uniquement les lignes qui ressemblent à un mot donné :

SELECT 
    PetName, 
    SOUNDEX(PetName),
    SOUNDEX('Wagg')
FROM Pets
WHERE SOUNDEX(PetName) = SOUNDEX('Wagg');

Résultat :

+---------+------------------+-----------------+
| PetName | SOUNDEX(PetName) | SOUNDEX('Wagg') |
+---------+------------------+-----------------+
| Wag     | W200             | W200            |
+---------+------------------+-----------------+

Cependant, vous préférerez peut-être utiliser SOUNDS LIKE à la place, ce qui est une façon plus concise de faire la même chose.

Chaîne vide

Voici ce qui se passe lorsqu'une chaîne vide est passée pour chaque argument donné :

SELECT SOUNDEX('');

Résultat :

+-------------+
| SOUNDEX('') |
+-------------+
|             |
+-------------+

Arguments nuls

Passer null renvoie null :

SELECT SOUNDEX(null);

Résultat :

+---------------+
| SOUNDEX(null) |
+---------------+
| NULL          |
+---------------+

Argument manquant

Appel de SOUNDEX() avec le mauvais nombre d'arguments, ou sans passage d'arguments, une erreur se produit :

SELECT SOUNDEX();

Résultat :

ERROR 1582 (42000): Incorrect parameter count in the call to native function 'SOUNDEX'