MariaDB
 sql >> Base de Dados >  >> RDS >> MariaDB

Como SOUNDEX() funciona no MariaDB


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'