No MariaDB, você pode usar
SOUNDS LIKE
em uma consulta para corresponder palavras que soam iguais. Sintaxe
A sintaxe fica assim:
expr1 SOUNDS LIKE expr2
É o mesmo que fazer isso:
SOUNDEX(expr1) = SOUNDEX(expr2)
. Soundex é um algoritmo fonético para indexar nomes por som, conforme pronunciado em inglês. Se duas palavras soam iguais, elas devem ter a mesma string Soundex. Se duas palavras soam semelhantes, mas não exatamente iguais, sua string Soundex pode parecer semelhante, mas não exatamente a mesma.
Exemplo
Segue um exemplo básico:
SELECT 'Two' SOUNDS LIKE 'Too';
Resultado:
+-------------------------+ | 'Two' SOUNDS LIKE 'Too' | +-------------------------+ | 1 | +-------------------------+
Neste caso, as duas palavras soam iguais.
Podemos usar o
SOUNDEX()
função para retornar a string Soundex de cada palavra:SELECT
SOUNDEX('Two'),
SOUNDEX('Too');
Resultado:
+----------------+----------------+ | SOUNDEX('Two') | SOUNDEX('Too') | +----------------+----------------+ | T000 | T000 | +----------------+----------------+
As cordas Soundex são idênticas. É por isso que
SOUNDS LIKE
retornou 1
. Sem correspondência
Aqui está um exemplo de duas palavras que não soam iguais:
SELECT 'Cat' SOUNDS LIKE 'Dog';
Resultado:
+-------------------------+ | 'Cat' SOUNDS LIKE 'Dog' | +-------------------------+ | 0 | +-------------------------+
Neste caso temos
0
, porque as palavras não soam iguais. Presumivelmente, suas cordas Soundex são diferentes. Vamos descobrir:SELECT
SOUNDEX('Cat'),
SOUNDEX('Dog');
Resultado:
+----------------+----------------+ | SOUNDEX('Cat') | SOUNDEX('Dog') | +----------------+----------------+ | C300 | D200 | +----------------+----------------+
Sim. Diferentes cordas Soundex.
Exemplo de banco de dados
Aqui está um exemplo de uso de
SOUNDS LIKE
no WHERE
cláusula de uma consulta de banco de dados:SELECT
PetName,
SOUNDEX(PetName),
SOUNDEX('Wagg')
FROM Pets
WHERE PetName SOUNDS LIKE 'Wagg';
Resultado:
+---------+------------------+-----------------+ | PetName | SOUNDEX(PetName) | SOUNDEX('Wagg') | +---------+------------------+-----------------+ | Wag | W200 | W200 | +---------+------------------+-----------------+
Aqui está usando o
SOUNDEX()
função para fazer a mesma coisa:SELECT
PetName,
SOUNDEX(PetName),
SOUNDEX('Wagg')
FROM Pets
WHERE SOUNDEX(PetName) = SOUNDEX('Wagg');
Resultado:
+---------+------------------+-----------------+ | PetName | SOUNDEX(PetName) | SOUNDEX('Wagg') | +---------+------------------+-----------------+ | Wag | W200 | W200 | +---------+------------------+-----------------+