dbo.obtener_edictos_mencionado_MIS

Description

Properties

Name Value
ANSI Nulls ON

True

Quoted Identifier ON

True

Encrypted

False

Execute As
Assembly

Parameters

1
Name Data Type Length Description
@palabras varchar 8000

SQL Script

Copy
SET QUOTED_IDENTIFIER, ANSI_NULLS ON
GO

/* 
EXEC obtener_edictos_mencionado_mis '"17726090" near "burgol"'
EXEC obtener_edictos_mencionado_mis '"17726090" or "20177260909"'

EXEC obtener_edictos_mencionado_mis '"17726090" or (NEAR((REVILLA ,CORNEJO, SERGIO),0,true)  OR NEAR((REVILLA,SERGIO,CORNEJO),0,true) OR NEAR((SERGIO,REVILLA,CORNEJO),0,true) OR NEAR((SERGIO,CORNEJO,REVILLA),0,true) OR NEAR((REVILLA,CORNEJO,SERGIO),0,true) OR NEAR((REVILLA,SERGIO,CORNEJO),0,true))'

EXEC obtener_edictos_mencionado_2 'NEAR((REVILLA ,CORNEJO, SERGIO),0,true)  OR NEAR((REVILLA,SERGIO,CORNEJO),0,true) OR NEAR((SERGIO,REVILLA,CORNEJO),0,true) OR NEAR((SERGIO,CORNEJO,REVILLA),0,true) OR NEAR((REVILLA,CORNEJO,SERGIO),0,true) OR NEAR((REVILLA,SERGIO,CORNEJO),0,true)'
EXEC obtener_edictos_mencionado_mis 'NEAR((REVILLA ,CORNEJO, SERGIO),0,true)  OR NEAR((REVILLA,SERGIO,CORNEJO),0,true) OR NEAR((SERGIO,REVILLA,CORNEJO),0,true) OR NEAR((SERGIO,CORNEJO,REVILLA),0,true) OR NEAR((REVILLA,CORNEJO,SERGIO),0,true) OR NEAR((REVILLA,SERGIO,CORNEJO),0,true)'

EXEC obtener_edictos_mencionado_mis 'NEAR((MALDONADO,MIRIAM,NELIDA),0,true) OR NEAR((MALDONADO,NELIDA,MIRIAM),0,true) OR NEAR((MIRIAM,MALDONADO,NELIDA),0,true) OR NEAR((MIRIAM,NELIDA,MALDONADO),0,true) OR NEAR((NELIDA,MALDONADO,MIRIAM),0,true) OR NEAR((NELIDA,MIRIAM,MALDONADO),0,true)'

*/

CREATE OR ALTER PROCEDURE dbo.obtener_edictos_mencionado_MIS  
@palabras varchar(8000) 

AS
BEGIN

 SET NOCOUNT ON
 declare @palabra varchar(1000)
 if @palabras like '% OR (%'
 begin 
  set @palabras = REPLACE(@palabras, ' OR (',' OR ')
  set @palabras = REPLACE(@palabras, '))',')')
 end
 -- separo todas las condiciones del contains (los distintos OR), para que el contains ande más rápido sin tantas condiciones
 declare @busquedas table (palabra varchar(max))
 insert into @busquedas 
  exec sp_separo_OR @palabras, ' OR '

 declare @respuesta table 
 (
 id_fide bigint, 
 id_boletin bigint, 
 provincia_boletin varchar(max),
 fecha_publicacion date,
 fecha_publicacion_DMY varchar(10),
 contenido_archivo varchar(max),
 razon_social  varchar(500),
 cuit_soc varchar(20), 
 Id INT IDENTITY(1,1))

 DECLARE C_busquedas CURSOR FOR
  select palabra
    from @busquedas 
 
 OPEN C_busquedas
 FETCH NEXT FROM C_busquedas INTO @palabra
 WHILE @@fetch_status = 0
 BEGIN 
  declare @sin_comillas varchar(max) = replace(@palabra,'"','')
  -- Si es un numero de menos de 7, no lo busca, porque muchas veces coincide con nros de acta, etc
  if (ISNUMERIC(@sin_comillas)=1 and LEN(@sin_comillas)<7)
  begin
   FETCH NEXT FROM C_busquedas INTO @palabra
   continue
  end
  -- Si es un numero de 7 u 8, también lo busca con los puntos decimales
  if (ISNUMERIC(@sin_comillas)=1 and LEN(@sin_comillas)=7)
  begin
   declare @dni7 varchar(10) = substring(@sin_comillas,1,1) + '.' + substring(@sin_comillas,2,3) + '.' + substring(@sin_comillas,5,3)
   set @palabra = '"' + @sin_comillas + '" OR "' + @dni7 + '"'
  end
  -- Si es un numero de 11, también lo busca con los guiones como CUIT
  if (ISNUMERIC(@sin_comillas)=1 and LEN(@sin_comillas)=8)
  begin
   declare @dni8 varchar(10) = substring(@sin_comillas,1,2) + '.' + substring(@sin_comillas,3,3) + '.' + substring(@sin_comillas,6,3)
   set @palabra = '"' + @sin_comillas + '" OR "' + @dni8 + '"'
  end
  if (ISNUMERIC(@sin_comillas)=1 and LEN(@sin_comillas)=11)
  begin
   declare @cuit varchar(20) = substring(@sin_comillas,1,2) + '-' + substring(@sin_comillas,3,8) + '-' + substring(@sin_comillas,11,1)
   set @palabra = '"' + @sin_comillas + '" OR "' + @cuit + '"'
  end
  select @palabra
  insert into @respuesta 
  (
  id_fide,
  id_boletin,
  provincia_boletin,
  fecha_publicacion,
  fecha_publicacion_DMY,
  contenido_archivo,
  razon_social,
  cuit_soc)

   select top 50 id_fide, id_boletin, 
   provincia_boletin = IIF(provincias.prv_nombre is null, iif(sociedades_constituciones.provincia_sociedad is null,sociedades_constituciones.fuente,sociedades_constituciones.provincia_sociedad), provincias.prv_nombre),    
   fecha_publicacion, 
   convert(varchar(11),fecha_publicacion,103) as fecha_publicacion_DMY,
   cast(contenido_archivo as varchar(max)) AS contenido_archivo,razon_social,
   documento_soc

   from sociedades_constituciones  
   left join provincias on provincias.prv_codigo = sociedades_constituciones.provincia_boletin and pai_codigo_ifx = 54

   where (contains(contenido_archivo,@palabra))

   order by fecha_publicacion desc

  FETCH NEXT FROM C_busquedas INTO @palabra

 end
 CLOSE C_busquedas
 DEALLOCATE C_busquedas

-- 15/01/2024: Devolvemos lo que guardamos en la tabla @respuesta, pero descartando los que son de la misma fecha y principio del texto igual, 
--             (porque seguramente los que tienen la misma fecha son duplicados aunque el texto no este exactamente igual).
select * from @respuesta a
where not exists (select * from @respuesta b where b.fecha_publicacion = a.fecha_publicacion 
              and convert(varchar(100),dbo.fn_StripCharacters(upper(convert(varchar(200),b.contenido_archivo)), '^A-Z0-9/')) = 
               convert(varchar(100),dbo.fn_StripCharacters(upper(convert(varchar(200),a.contenido_archivo)), '^A-Z0-9/'))
               and b.id > a.id) 
order by a.fecha_publicacion desc


END

GO

Used By

No items found