pesquisa fonetica no SQL

pesquisa fonetica no SQL

Ao criar sistemas online para pesquisa de dados, pode ocorrer o caso do usuário escrever errado o nome do item que ele deseja localizar. Utilizando como exemplo um listagem de produtos, o usuário deseja localizar uma mochila e ele escreve "moxila". Utilizando o operado "LIKE", não seriam localizados resultados.

Será que seria possível resolver este problema?

Para tentar ajudar nestas situações, o SQL possui uma função chamada SOUNDEX. Com ele será possível fazer uma pesquisa fonética.

A função SOUNDEX() retorna um código de quatro caracteres para avaliar a semelhança de duas expressões. Esta função converte a expressão pesquisada num código de quatro caracteres, ele toma como base a forma como a expressão solicitada soa quando falada. A referência é o idioma inglês.

Veja um exemplo comparando dois textos parecidos:

SELECT SOUNDEX(\'Mochila\') AS exemplo1, SOUNDEX (\'Moxila\') AS exemplo2;

Ao executar a consulta acima, perceba que o código gerado gerado ambos foi o mesmo.

Para ver como isso funciona na prática, vamos criar uma tabela de testes e vamos adicionar algums registros:

//MYSQL

CREATE TABLE produtos (

codigo INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,

nome VARCHAR(50) NOT NULL

)

//SQL SERVER

CREATE TABLE [dbo].[produtos](

[codigo] [int] IDENTITY(1,1) NOT NULL,

[nome] [varchar](50) NOT NULL,

 CONSTRAINT [PK_produtos] PRIMARY KEY CLUSTERED 

([codigo] ASC)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY]

 

Informações que vamos utilizar como exemplo:

 

insert into produtos (nome) VALUES (\'Mochila\');

insert into produtos (nome) VALUES (\'Muchila\');

insert into produtos (nome) VALUES (\'Moxila\');

insert into produtos (nome) VALUES (\'Muxila\');

insert into produtos (nome) VALUES (\'Chaveiro\');

insert into produtos (nome) VALUES (\'Xaveiro\');

insert into produtos (nome) VALUES (\'Chavero\');

insert into produtos (nome) VALUES (\'Xavero\');

insert into produtos (nome) VALUES (\'travesseiro\');

insert into produtos (nome) VALUES (\'traveçeiro\');

insert into produtos (nome) VALUES (\'travesero\');

insert into produtos (nome) VALUES (\'Chaveiro de plástico\');

insert into produtos (nome) VALUES (\'Chaveiro de metal\');

insert into produtos (nome) VALUES (\'Chavero de plástico\');

insert into produtos (nome) VALUES (\'Chavero de metal\');

 

Agora vamos as consultas:

 

select * from produtos where SOUNDEX(nome) = SOUNDEX(\'Moxila\');

A consulta trouxe 4 resultados, já que os exemplos cadastrados tinha sonoridade parecida.

 

select * from produtos where SOUNDEX(nome) = SOUNDEX(\'Xaveiro\');

Trouxe apenas 1 resultado ao pesquisar no MySQL e 2 resultados ao pesquisar no SQL Server. Apesar dos outros cadastros terem a sonoridade parecida, a referência não é o idioma portugês. A sonoridade tem com base o inglês.

 

select * from produtos where SOUNDEX(nome) = SOUNDEX(\'travesero\');

Nest consulta, houve o retorno de 2 resultados. O nome que foi escrito com cedilha não apareceu nos resultados.

 

select * from produtos where SOUNDEX(nome) = SOUNDEX(\'Chavero\');

Trouxe 6 resultados no SQL Server e 2 resultados no MySQL, não retornou os nomes que tinham "plástico" e "metal" na sequência. Para resolver este problema, vamos considerar que a pesquisa considere o começo do nome, antes do primeiro espaço. Sendo assim, a consulta anterior no MySQL ficaria da seguinte forma:

 

SELECT * FROM produtos WHERE SOUNDEX(SUBSTRING_INDEX(nome, \' \', 1)) = SOUNDEX(\'Chavero\')

 

 

Outros conteudos que podem ser de seu interesse

Comandos uteis para trabalhar com tabelas no SQL
15/03/2020SQL

Comandos uteis para trabalhar com tabelas no SQL

Algumas dicas de como listar a quantidade de registros, data de atualização e índices de tabelas no SQL Server e no MySQL

Saiba mais...
Convertendo strings de data no MySQL utilizando STR_TO_DATE
29/09/2024SQL

Convertendo strings de data no MySQL utilizando STR_TO_DATE

Veja exemplos de conversões de strings no formato de data utilizando MySQL

Saiba mais...
Listando chaves primárias e estrangeiras de um banco de dados SQL
15/03/2021SQL

Listando chaves primárias e estrangeiras de um banco de dados SQL

Como listar as chaves primárias e estrangeiras de um banco de dados MySQL ou SQL Server

Saiba mais...

Conteúdo sobre banco de dados sem complicação!


Warning: Cannot modify header information - headers already sent by (output started at /home/storage/f/7d/a9/dbins/public_html/blog/post.php:101) in /home/storage/f/7d/a9/dbins/public_html/blog/ga4_track.php on line 11