dbo.obtener_edictos_mencionado_2024

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 '"17726090" near "burgol"'
EXEC obtener_edictos_mencionado '"17726090"'

EXEC obtener_edictos_mencionado '"17726090" or "30641368977" 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 '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 '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)'
exec obtener_edictos_mencionado '"CHUMA MARTIN NOELIA SOLEDAD"'
*/

CREATE OR ALTER PROCEDURE dbo.obtener_edictos_mencionado_2024  

@palabras varchar(8000) 

AS
BEGIN
SET NOCOUNT ON
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))
/*------------------------------*/
/* VERSION QUE NO DEVUELVE NADA */
/*------------------------------*/
/*
select * from  @respuesta 
return
*/


/*------------------------------*/
/* VERSION 1 ORIGINAL           */ 
/*------------------------------*/
/*
insert into @respuesta 
(
id_fide,
id_boletin,
provincia_boletin,
fecha_publicacion,
fecha_publicacion_DMY,
contenido_archivo,
razon_social,
cuit_soc)

select top /*500*/
 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,@palabras))

order by fecha_publicacion desc


-- 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
*/

/*-----------------------------------------*/
/* VERSION 2 SEPARANDO LOS OR DEL CONTAINS */ 
/*-----------------------------------------*/
/**/
 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 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
  --
  insert into @respuesta 
  (
  id_fide,
  id_boletin,
  provincia_boletin,
  fecha_publicacion,
  fecha_publicacion_DMY,
  contenido_archivo,
  razon_social,
  cuit_soc)

   select top 100 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