I MariaDB kan du använda SOUNDS LIKE
i en fråga för att matcha ord som låter likadana.
Syntax
Syntaxen ser ut så här:
expr1 SOUNDS LIKE expr2
Det är samma sak som att göra så här:SOUNDEX(expr1) = SOUNDEX(expr2)
.
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.
Exempel
Här är ett grundläggande exempel:
SELECT 'Two' SOUNDS LIKE 'Too';
Resultat:
+-------------------------+ | 'Two' SOUNDS LIKE 'Too' | +-------------------------+ | 1 | +-------------------------+
I det här fallet låter de två orden likadana.
Vi kan använda SOUNDEX()
funktion för att returnera Soundex-strängen för varje ord:
SELECT
SOUNDEX('Two'),
SOUNDEX('Too');
Resultat:
+----------------+----------------+ | SOUNDEX('Two') | SOUNDEX('Too') | +----------------+----------------+ | T000 | T000 | +----------------+----------------+
Soundex-strängarna är identiska. Det är därför SOUNDS LIKE
returnerade 1
.
Ingen match
Här är ett exempel på två ord som inte låter likadant:
SELECT 'Cat' SOUNDS LIKE 'Dog';
Resultat:
+-------------------------+ | 'Cat' SOUNDS LIKE 'Dog' | +-------------------------+ | 0 | +-------------------------+
I det här fallet fick vi 0
, eftersom orden inte låter likadana. Förmodligen är deras Soundex-strängar annorlunda. Låt oss ta reda på:
SELECT
SOUNDEX('Cat'),
SOUNDEX('Dog');
Resultat:
+----------------+----------------+ | SOUNDEX('Cat') | SOUNDEX('Dog') | +----------------+----------------+ | C300 | D200 | +----------------+----------------+
Japp. Olika Soundex-strängar.
Databasexempel
Här är ett exempel på hur du använder SOUNDS LIKE
i WHERE
klausul i en databasfråga:
SELECT
PetName,
SOUNDEX(PetName),
SOUNDEX('Wagg')
FROM Pets
WHERE PetName SOUNDS LIKE 'Wagg';
Resultat:
+---------+------------------+-----------------+ | PetName | SOUNDEX(PetName) | SOUNDEX('Wagg') | +---------+------------------+-----------------+ | Wag | W200 | W200 | +---------+------------------+-----------------+
Här använder den SOUNDEX()
funktion för att göra samma sak:
SELECT
PetName,
SOUNDEX(PetName),
SOUNDEX('Wagg')
FROM Pets
WHERE SOUNDEX(PetName) = SOUNDEX('Wagg');
Resultat:
+---------+------------------+-----------------+ | PetName | SOUNDEX(PetName) | SOUNDEX('Wagg') | +---------+------------------+-----------------+ | Wag | W200 | W200 | +---------+------------------+-----------------+