sql >> Databasteknik >  >> RDS >> MariaDB

Hur SOUNDEX() fungerar i MariaDB

I MariaDB, SOUNDEX() är en inbyggd strängfunktion som returnerar Soundex-strängen från en given sträng.

Soundex är en fonetisk algoritm för att indexera namn efter ljud, som uttalas på engelska. Om två ord låter likadana bör de ha samma Soundex-sträng. Om två ord låter lika, men inte exakt likadana, kan deras Soundex-sträng se likadana ut men inte exakt likadana.

Funktionen accepterar ett argument:strängen som Soundex-strängen ska returneras från.

Syntax

Syntaxen ser ut så här:

SOUNDEX(str)

Där str är strängen som Soundex-strängen ska returneras från.

Exempel

Här är ett grundläggande exempel:

SELECT SOUNDEX('Bat');

Resultat:

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

Här är ett annat exempel som jämför Soundex-strängen som returneras från liknande, men olika, klingande ord:

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

Resultat:

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

Och här är en som jämför ord som inte låter likadana:

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

Resultat:

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

Jag bör nämna att den här funktionen implementerar den ursprungliga Soundex-algoritmen som kasserar vokaler först och duplicerar sedan. Detta i motsats till den förbättrade versionen, som kasserar dubbletter först och vokaler andra.

Dessutom är en standard Soundex-sträng fyra tecken lång, men MariaDB:s SOUNDEX() funktion returnerar en godtyckligt lång sträng. Därför inkluderar ovanstående resultat icke-standardiserade Soundex-strängar.

För att illustrera vad jag menar, här är resultatet som jag får när jag använder Oracles SOUNDEX() funktion för att göra samma sak:

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

Resultat:

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

Exakta matchningar

Här är ett exempel på ordpar som har en matchande Soundex-sträng, även om de är olika ord, med olika betydelser:

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

Resultat:

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

Databasexempel

Här är ett exempel på hur du hämtar Soundex-strängen från en databasfråga:

SELECT 
    PetName, 
    SOUNDEX(PetName)
FROM Pets;

Resultat:

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

Vi kan också använda SOUNDEX() i en WHERE sats för att endast returnera de rader som låter som ett givet ord:

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

Resultat:

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

Men du kanske föredrar att använda SOUNDS LIKE istället, vilket är ett mer kortfattat sätt att göra samma sak.

Töm sträng

Så här händer när en tom sträng skickas för varje givet argument:

SELECT SOUNDEX('');

Resultat:

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

Nollargument

Skickar null returnerar null :

SELECT SOUNDEX(null);

Resultat:

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

Argument saknas

Anropar SOUNDEX() med fel antal argument, eller utan att skicka några argument resulterar i ett fel:

SELECT SOUNDEX();

Resultat:

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

  1. Hur man korrekt hanterar datum i frågebegränsningar

  2. Charlotte SQL Server User Group:Fixa långsamma frågor. Snabb.

  3. Uppdatera en materialiserad vy automatiskt med hjälp av en regel eller avisering

  4. Okänd kolumn i "fältlista"-fel på MySQL Update-fråga