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

Identificando as tabelas mais utilizadas no SQL SERVER
20/10/2019SQL

Identificando as tabelas mais utilizadas no SQL SERVER

Veja quais as tabelas mais utilizadas do seu banco de dados

Saiba mais...
Localizando tabela por data de criação com SQL Server ou MySQL
08/08/2016SQL

Localizando tabela por data de criação com SQL Server ou MySQL

Uma dica rápida para quem trabalha com SQL Server ou MySQL e deseja localizar tabelas por data de criação

Saiba mais...
Importar arquivos CSV com o MySQL
30/09/2019SQL

Importar arquivos CSV com o MySQL

Aprenda a importar arquivos CSV utilizando o MySQL

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