sql >> Database >  >> RDS >> MariaDB

Hoe SOUNDEX() werkt in MariaDB

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'

  1. Recursieve CTE schrijven met behulp van Entity Framework Fluent-syntaxis of Inline-syntaxis

  2. Hoe gegevens genereren in MySQL?

  3. Back-up/herstel van SQL Server versus loskoppelen/bijvoegen

  4. Read Committed is een must voor Postgres-compatibele gedistribueerde SQL-databases