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'