jueves, 3 de octubre de 2019

Sinónimos de palabras similares en SQL SERVER

Buenas tardes. Hace un tiempo publique un post que hablaba sobre Sinónimos en SQL SERVER, sin embargo trataba de sinónimos en en objetos, es decir, ponerle algún pseudonimo a las tablas, procedimientos o funciones. Les dejo el link http://www.respuestasit.com.mx/2016/10/sinonimos-en-sql-server.html. Sin embargo en esta ocasión les dejaré una función para buscar sinónimos en palabras similares, ¿Qué pasa cuando le damos un Where, pero hay palabras muy similares?. Esas palabras no se van a incluir. Otro caso, queremos buscar las palabras "perro, can, perra, etc", tendríamos que hacer tres o mas búsquedas dentro del like, pues bien, yo les voy a decir como solucionar ese problema.



Hace unos días como DBA, me pidieron dar solución al tema de las búsquedas, por decir algo, el cliente quería buscar refacciones para un Tsuru, y al escribir, escribía palabra como suru, Tzuru, y cosas así, al principio pensé en echarle la bolita a desarrollo, pero después se me ocurrió una manera de parcharlo.

Primero vamos a crear una tabla que contendrá los sinónimos


create table sinonimos
(
id int identity,
palabra varchar(300),
syn varchar (300))


La tabla consta de tres campos, el primero es el Id que toda tabla debe de tener, además de ser una identidad, el segundo campo es la palabra que escribimos, y el campo syn, es el sinónimo de esa palabra.

Ahora vamos a proceder a llenar esa tabla para que vean para que sirve

insert into sinonimos (palabra, syn) values
('suru', 'Tsuru'),
('Refaxionaria', 'REFACCIONARIA'),
('REFACIONARIA', 'REFACCIONARIA'),

('KARBURADOR', 'CARBURADOR').

Una vez llena la tabla realizaremos la siguiente función.

create function fn_sinonimos (@buscar varchar(max))
RETURNS VARCHAR(MAX)
AS
BEGIN
       DECLARE @reg int
       declare @b varchar(max)
       declare @palabra varchar(max)
       declare @sin varchar(100)
       set @b=@buscar
       declare @tabla table
       (num_reg int, id int, palabra varchar(max), sinonimo varchar(max))
       insert into @tabla
       select ROW_NUMBER() over(order by id asc), id, palabra, syn
       from sinonimos
       select @reg = MAX(num_reg) from @tabla
       while (@reg > 0)
       begin
       select @palabra = palabra from @tabla where num_reg = @reg
       select @sin = sinonimo from @tabla where num_reg = @reg
       set @b=replace(@b, @palabra, @sin)
       set @reg = @reg - 1
       end
RETURN @b
END
GO

En esta función lo que estamos realizando es la búsqueda del texto que envíamos como parámetro en la tabla de sinónimos, para posteriormente retornar el sinónimo encontrado.

Ahora vamos a ejecutar esta función

DECLARE @palabra varchar(100)
set @palabra = 'Suru'

select dbo.fn_sinonimos(@palabra)


DECLARE @palabra varchar(100)
set @palabra = 'REFAXIONARIA'
select dbo.fn_sinonimos(@palabra)


Como ven las posibilidades son infinitas con esta función para buscar sinónimos. Espero que este post haya sido de su agrado, cualquier duda, estoy a la orden. Espero puedan dar clic en algún anuncio que les interese. Muchas gracias






No hay comentarios.:

Publicar un comentario

Sinónimos de palabras similares en SQL SERVER

Buenas tardes. Hace un tiempo publique un post que hablaba sobre Sinónimos en SQL SERVER, sin embargo trataba de sinónimos en en objetos, e...