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

SQL vs Pandas - Convertendo linhas em colunas
12/05/2024SQL

SQL vs Pandas - Convertendo linhas em colunas

Veja como fazer a transposição de linhas em colunas usando Pandas e SQL

Saiba mais...
A importância de conhecer a si mesmo
02/03/2020SQL

A importância de conhecer a si mesmo

Conheça várias ferramentas que podem ajudar você a se conhecer melhor

Saiba mais...
Trabalhando com datas no Excel
25/07/2016SQL

Trabalhando com datas no Excel

Aprenda como controlar datas no Excel e fazer vários tipos de cálculos!

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