No MariaDB,
SOUNDEX()
é uma função de string interna que retorna a string Soundex de uma determinada string. 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.
A função aceita um argumento:a string da qual retornar a string Soundex.
Sintaxe
A sintaxe fica assim:
SOUNDEX(str)
Onde
str
é a string da qual retornar a string Soundex. Exemplo
Segue um exemplo básico:
SELECT SOUNDEX('Bat');
Resultado:
+----------------+ | SOUNDEX('Bat') | +----------------+ | B300 | +----------------+
Aqui está outro exemplo que compara a string Soundex retornada de palavras com sons semelhantes, mas diferentes:
SELECT
SOUNDEX('Bat'),
SOUNDEX('Cat'),
SOUNDEX('Cap');
Resultado:
+----------------+----------------+----------------+ | SOUNDEX('Bat') | SOUNDEX('Cat') | SOUNDEX('Cap') | +----------------+----------------+----------------+ | B300 | C300 | C100 | +----------------+----------------+----------------+
E aqui está um que compara palavras que não soam iguais:
SELECT
SOUNDEX('Apartment'),
SOUNDEX('Vehicle'),
SOUNDEX('Groceries');
Resultado:
+----------------------+--------------------+----------------------+ | SOUNDEX('Apartment') | SOUNDEX('Vehicle') | SOUNDEX('Groceries') | +----------------------+--------------------+----------------------+ | A16353 | V240 | G6262 | +----------------------+--------------------+----------------------+
Devo mencionar que esta função implementa o algoritmo original do Soundex que descarta as vogais primeiro e duplica o segundo. Isso contrasta com a versão aprimorada, que descarta as duplicatas primeiro e as vogais depois.
Além disso, uma string padrão do Soundex tem quatro caracteres, mas o
SOUNDEX()
do MariaDB A função retorna uma string arbitrariamente longa. Portanto, os resultados acima incluem strings Soundex não padrão. Para ilustrar o que quero dizer, aqui está o resultado que recebo ao usar o
SOUNDEX()
da Oracle função para fazer a mesma coisa:SELECT
SOUNDEX('Apartment'),
SOUNDEX('Vehicle'),
SOUNDEX('Groceries')
FROM DUAL;
Resultado:
SOUNDEX('APARTMENT') SOUNDEX('VEHICLE') SOUNDEX('GROCERIES') _______________________ _____________________ _______________________ A163 V240 G626
Correspondências exatas
Aqui está um exemplo de pares de palavras que têm uma string Soundex correspondente, mesmo que sejam palavras diferentes, com significados diferentes:
SELECT
SOUNDEX('Dam') AS Dam,
SOUNDEX('Damn') AS Damn,
SOUNDEX('Too') AS Too,
SOUNDEX('Two') AS Two;
Resultado:
+------+------+------+------+ | Dam | Damn | Too | Two | +------+------+------+------+ | D500 | D500 | T000 | T000 | +------+------+------+------+
Exemplo de banco de dados
Aqui está um exemplo de como obter a string Soundex de uma consulta de banco de dados:
SELECT
PetName,
SOUNDEX(PetName)
FROM Pets;
Resultado:
+---------+------------------+ | PetName | SOUNDEX(PetName) | +---------+------------------+ | Fluffy | F410 | | Fetch | F320 | | Scratch | S632 | | Wag | W200 | | Tweet | T000 | | Fluffy | F410 | | Bark | B620 | | Meow | M000 | +---------+------------------+
Também podemos usar
SOUNDEX()
em um WHERE
cláusula para retornar apenas as linhas que soam como uma determinada palavra:SELECT
PetName,
SOUNDEX(PetName),
SOUNDEX('Wagg')
FROM Pets
WHERE SOUNDEX(PetName) = SOUNDEX('Wagg');
Resultado:
+---------+------------------+-----------------+ | PetName | SOUNDEX(PetName) | SOUNDEX('Wagg') | +---------+------------------+-----------------+ | Wag | W200 | W200 | +---------+------------------+-----------------+
No entanto, você pode preferir usar
SOUNDS LIKE
em vez disso, que é uma maneira mais concisa de fazer a mesma coisa. String vazia
Aqui está o que acontece quando uma string vazia é passada para cada argumento dado:
SELECT SOUNDEX('');
Resultado:
+-------------+ | SOUNDEX('') | +-------------+ | | +-------------+
Argumentos nulos
Passando
null
retorna null
:SELECT SOUNDEX(null);
Resultado:
+---------------+ | SOUNDEX(null) | +---------------+ | NULL | +---------------+
Argumento ausente
Chamando
SOUNDEX()
com o número errado de argumentos ou sem passar nenhum argumento resulta em um erro:SELECT SOUNDEX();
Resultado:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'SOUNDEX'