I MariaDB kan du bruge SOUNDS LIKE
i en forespørgsel for at matche ord, der lyder ens.
Syntaks
Syntaksen ser sådan ud:
expr1 SOUNDS LIKE expr2
Det er det samme som at gøre dette:SOUNDEX(expr1) = SOUNDEX(expr2)
.
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.
Eksempel
Her er et grundlæggende eksempel:
SELECT 'Two' SOUNDS LIKE 'Too';
Resultat:
+-------------------------+ | 'Two' SOUNDS LIKE 'Too' | +-------------------------+ | 1 | +-------------------------+
I dette tilfælde lyder de to ord ens.
Vi kan bruge SOUNDEX()
funktion for at returnere Soundex-strengen for hvert ord:
SELECT
SOUNDEX('Two'),
SOUNDEX('Too');
Resultat:
+----------------+----------------+ | SOUNDEX('Two') | SOUNDEX('Too') | +----------------+----------------+ | T000 | T000 | +----------------+----------------+
Soundex-strengene er identiske. Det er derfor SOUNDS LIKE
returnerede 1
.
Ingen match
Her er et eksempel på to ord, der ikke lyder ens:
SELECT 'Cat' SOUNDS LIKE 'Dog';
Resultat:
+-------------------------+ | 'Cat' SOUNDS LIKE 'Dog' | +-------------------------+ | 0 | +-------------------------+
I dette tilfælde fik vi 0
, fordi ordene ikke lyder ens. Formentlig er deres Soundex-strenge anderledes. Lad os finde ud af:
SELECT
SOUNDEX('Cat'),
SOUNDEX('Dog');
Resultat:
+----------------+----------------+ | SOUNDEX('Cat') | SOUNDEX('Dog') | +----------------+----------------+ | C300 | D200 | +----------------+----------------+
Jep. Forskellige Soundex-strenge.
Databaseeksempel
Her er et eksempel på brug af SOUNDS LIKE
i WHERE
klausul i en databaseforespørgsel:
SELECT
PetName,
SOUNDEX(PetName),
SOUNDEX('Wagg')
FROM Pets
WHERE PetName SOUNDS LIKE 'Wagg';
Resultat:
+---------+------------------+-----------------+ | PetName | SOUNDEX(PetName) | SOUNDEX('Wagg') | +---------+------------------+-----------------+ | Wag | W200 | W200 | +---------+------------------+-----------------+
Her bruger den SOUNDEX()
funktion til at gøre det samme:
SELECT
PetName,
SOUNDEX(PetName),
SOUNDEX('Wagg')
FROM Pets
WHERE SOUNDEX(PetName) = SOUNDEX('Wagg');
Resultat:
+---------+------------------+-----------------+ | PetName | SOUNDEX(PetName) | SOUNDEX('Wagg') | +---------+------------------+-----------------+ | Wag | W200 | W200 | +---------+------------------+-----------------+