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 '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"'
EXEC obtener_edictos_mencionado '"LAPIDUZ PABLO HERNAN"'
*/
CREATE OR ALTER PROCEDURE dbo.obtener_edictos_mencionado
@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))
where (contains(sociedades_constituciones.*,@palabra))
and cast(contenido_archivo as varchar(max)) != ''
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
GO
/*
EXEC obtener_edictos_mencionado '"17726090" near "burgol"'
EXEC obtener_edictos_mencionado '"17726090"'
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((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"'
EXEC obtener_edictos_mencionado '"LAPIDUZ PABLO HERNAN"'
*/
CREATE OR ALTER PROCEDURE dbo.obtener_edictos_mencionado
@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))
where (contains(sociedades_constituciones.*,@palabra))
and cast(contenido_archivo as varchar(max)) != ''
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