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'