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

Inserir valores em campos do tipo autonumeração no SQL Server
26/09/2019SQL

Inserir valores em campos do tipo autonumeração no SQL Server

Aprenda como inserir valores em campos de autonumeração no SQL Server

Saiba mais...
Como localizar queries lentas no SQL Server
23/09/2019SQL

Como localizar queries lentas no SQL Server

Aprenda como localizar as queries que deixam o seu banco de dados lento

Saiba mais...
Roadmap Excel
09/06/2024SQL

Roadmap Excel

Um roteiro de estudos para você dominar o básico do Excel para Análise de Dados

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