sql >> Database teknologi >  >> RDS >> MariaDB

Hvordan SOUNDEX() virker i MariaDB

I MariaDB, SOUNDEX() er en indbygget strengfunktion, der returnerer Soundex-strengen fra en given streng.

Soundex er en fonetisk algoritme til at indeksere navne efter lyd, som udtales på engelsk. Hvis to ord lyder ens, skal de have den samme Soundex-streng. Hvis to ord lyder ens, men ikke helt ens, kan deres Soundex-streng ligne, men ikke helt ens.

Funktionen accepterer ét argument:strengen, som Soundex-strengen skal returneres fra.

Syntaks

Syntaksen ser sådan ud:

SOUNDEX(str)

Hvor str er den streng, som Soundex-strengen skal returneres fra.

Eksempel

Her er et grundlæggende eksempel:

SELECT SOUNDEX('Bat');

Resultat:

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

Her er et andet eksempel, der sammenligner Soundex-strengen, der er returneret fra lignende, men forskellige, lydende ord:

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

Resultat:

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

Og her er en, der sammenligner ord, der ikke lyder ens:

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

Resultat:

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

Jeg bør nævne, at denne funktion implementerer den originale Soundex-algoritme, som kasserer vokaler først og duplikerer derefter. Dette er i modsætning til den forbedrede version, som kasserer dubletter først og vokaler dernæst.

Desuden er en standard Soundex-streng fire tegn lang, men MariaDBs SOUNDEX() funktion returnerer en vilkårligt lang streng. Derfor inkluderer ovenstående resultater ikke-standard Soundex-strenge.

For at illustrere, hvad jeg mener, er her resultatet, jeg får, når jeg bruger Oracles SOUNDEX() funktion til at gøre det samme:

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

Resultat:

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

Nøjagtige match

Her er et eksempel på ordpar, der har en matchende Soundex-streng, selvom de er forskellige ord, med forskellige betydninger:

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

Databaseeksempel

Her er et eksempel på at få Soundex-strengen fra en databaseforespørgsel:

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 også bruge SOUNDEX() i en WHERE klausul for kun at returnere de rækker, der lyder som et givet ord:

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

Resultat:

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

Du foretrækker dog måske at bruge SOUNDS LIKE i stedet, hvilket er en mere kortfattet måde at gøre det samme på.

Tøm streng

Her er, hvad der sker, når en tom streng sendes for hvert givet argument:

SELECT SOUNDEX('');

Resultat:

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

Nul-argumenter

Sender null returnerer null :

SELECT SOUNDEX(null);

Resultat:

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

Manglende argument

Kalder SOUNDEX() med det forkerte antal argumenter, eller uden at sende nogen argumenter, resulterer det i en fejl:

SELECT SOUNDEX();

Resultat:

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

  1. Tjek, om en tabel har en TIMESTAMP-kolonne i SQL Server med OBJECTPROPERTY()

  2. Databasemodel for en køreskoles reservationssystem. Del 1

  3. Oracle/SQL:Hvorfor forespørger SELECT * FROM records WHERE rownum>=5 AND rownum <=10 - returnerer nul rækker

  4. Sådan trækker du timer fra en dato-tidsværdi i MariaDB