Description
Properties
| Name | Value |
|---|---|
| ANSI Nulls ON | True |
| Quoted Identifier ON | True |
| Encrypted | False |
| Execute As | |
| Assembly |
Parameters
6| Name | Data Type | Length | Description |
|---|---|---|---|
| @domicilio1 | varchar | 500 | |
| @provincia | varchar | 2 | |
| @tipo_domicilio | varchar | 100 | |
| @busqueda_domicilio | varchar | 800 | |
| @busqueda_provincia | varchar | 2 | |
| @busqueda_tipo_domicilio | varchar | 10 |
SQL Script
Copy
SET QUOTED_IDENTIFIER, ANSI_NULLS ON
GO
/* [sp_domicilios_buscar_vecinos] dado un CUIT busca su domicilio principal y todos los vecinos */
/* Enviando como parametro un domicilio, arma la busqueda para buscar por contains
busca la altura dentro del domicilio enviado,
elimina palabras como Av Avenida Calle Nro etc
elimina palabras de menos de 3 letras */
/* Ejemplo para usarlo
DECLARE @busqueda_domicilio varchar(800),
@busqueda_provincia varchar(2),
@busqueda_tipo_domicilio varchar(100)
exec [sp_domicilios_calle_altura] 'ZAY (N) 15 1042', '0', 'L,F,D',
@busqueda_domicilio output,
@busqueda_provincia output,
@busqueda_tipo_domicilio output
select @busqueda_domicilio,
@busqueda_provincia,
@busqueda_tipo_domicilio
select domicilios_todos.cuit, padrones.nombre_persona, domicilio, prv_nombre, loc_nombre, codpos, tipo_domicilio
from domicilios_todos
INNER JOIN dbo.DelimitedSplit8K(@busqueda_tipo_domicilio, ',') lista ON lista.item = domicilios_todos.tipo_domicilio
INNER JOIN Padrones on (padrones.identificacion = domicilios_todos.cuit and habilitado = 1)
where prv_codigo = @busqueda_provincia and contains(domicilio,@busqueda_domicilio) and visible = 1
*/
CREATE OR ALTER PROCEDURE dbo.sp_domicilios_calle_altura
@domicilio1 varchar(500),
@provincia varchar(2) = null, --
@tipo_domicilio varchar(100) = null,
@busqueda_domicilio varchar(800) = null output,
@busqueda_provincia varchar(2) = null output,
@busqueda_tipo_domicilio varchar(10) = null output
AS
BEGIN
SET NOCOUNT ON;
declare @cant1 smallint = 0
declare @palabras1 table (nro smallint, palabra varchar(100))
declare @pal varchar(100)
declare @i smallint, @j smallint
set @domicilio1 = REPLACE(@domicilio1,'¥','')
--- Paso 1: separo las palabras de los domicilios
while (@domicilio1 like '% %')
begin
set @domicilio1 = replace(@domicilio1,' ',' ')
end
set @i = len(@domicilio1)
set @j = CHARINDEX(' ', @domicilio1)
while (@j < @i and @j > 0)
begin
set @cant1 = @cant1 + 1
set @pal = (SELECT SUBSTRING(@domicilio1, 1, CHARINDEX(' ', @domicilio1) - 1))
insert into @palabras1 values (@cant1, @pal)
SET @domicilio1 = (select SUBSTRING(@domicilio1, CHARINDEX(' ', @domicilio1) +1, LEN(@domicilio1)))
set @i = len(@domicilio1)
set @j = CHARINDEX(' ', @domicilio1)
end
set @cant1 = @cant1 + 1
set @pal = @domicilio1
insert into @palabras1 values (@cant1, @pal)
-- altura del domicilio
declare @Numero_1 varchar(10) = null
set @i = 2
while (@i <= @cant1)
BEGIN
IF (@i = 2 AND (select palabra from @palabras1 where nro = 1) = 'CALLE')
BEGIN
set @i = @i + 1
CONTINUE
END
IF (@i = 3 AND (select palabra from @palabras1 where nro = 1) = 'CALLE'
AND (select palabra from @palabras1 where nro = 2) in ('N', 'NRO', 'NRO.','N*','Nº'))
BEGIN
set @i = @i + 1
CONTINUE
END
set @pal = (select palabra from @palabras1 where nro = @i)
IF ((select isnumeric(@pal)) = 1)
BEGIN
set @pal = replace(@pal,',','')
set @pal = replace(@pal,'-','')
set @pal = replace(@pal,'.','')
set @Numero_1 = convert(int,@pal)
update @palabras1 set palabra = null where nro = @i
/* Borramos todo lo que esta despues de la altura, si no se quiere borrar sacar la linea de abajo */
update @palabras1 set palabra = null where nro > @i
break
END
set @i = @i + 1
END
set @i = 1
while (@i <= @cant1)
BEGIN
set @pal = (select palabra from @palabras1 where nro = @i)
set @pal = replace(@pal,'(','')
set @pal = replace(@pal,')','')
set @pal = replace(@pal,'\*','')
set @pal = replace(@pal,'\"','')
set @pal = replace(@pal,'%','')
update @palabras1 set palabra = @pal where nro = @i
if (@pal in ('AV','AV.','AVDA','AVDA.','CALLE','NRO', 'NRO.','N*','Nº')
or
len(@pal) <= 2)
BEGIN
update @palabras1 set palabra = null where nro = @i
END
set @i = @i + 1
END
declare @buscar varchar(8000) = ''
DECLARE C_cur CURSOR FOR
select upper(palabra) from @palabras1 where palabra is not null
OPEN C_cur
FETCH NEXT FROM C_cur INTO @pal
WHILE @@fetch_status = 0
BEGIN
if @buscar = '' set @buscar = @pal
else
set @buscar = @buscar + ' near ' + @pal
FETCH NEXT FROM C_cur INTO @pal
END
CLOSE C_cur
DEALLOCATE C_cur
if @Numero_1 != '' and @buscar != ''
set @buscar = @buscar + ' near ' + @Numero_1
set @busqueda_domicilio = @buscar
set @busqueda_provincia = @provincia
set @busqueda_tipo_domicilio = @tipo_domicilio
END
GO
GO
/* [sp_domicilios_buscar_vecinos] dado un CUIT busca su domicilio principal y todos los vecinos */
/* Enviando como parametro un domicilio, arma la busqueda para buscar por contains
busca la altura dentro del domicilio enviado,
elimina palabras como Av Avenida Calle Nro etc
elimina palabras de menos de 3 letras */
/* Ejemplo para usarlo
DECLARE @busqueda_domicilio varchar(800),
@busqueda_provincia varchar(2),
@busqueda_tipo_domicilio varchar(100)
exec [sp_domicilios_calle_altura] 'ZAY (N) 15 1042', '0', 'L,F,D',
@busqueda_domicilio output,
@busqueda_provincia output,
@busqueda_tipo_domicilio output
select @busqueda_domicilio,
@busqueda_provincia,
@busqueda_tipo_domicilio
select domicilios_todos.cuit, padrones.nombre_persona, domicilio, prv_nombre, loc_nombre, codpos, tipo_domicilio
from domicilios_todos
INNER JOIN dbo.DelimitedSplit8K(@busqueda_tipo_domicilio, ',') lista ON lista.item = domicilios_todos.tipo_domicilio
INNER JOIN Padrones on (padrones.identificacion = domicilios_todos.cuit and habilitado = 1)
where prv_codigo = @busqueda_provincia and contains(domicilio,@busqueda_domicilio) and visible = 1
*/
CREATE OR ALTER PROCEDURE dbo.sp_domicilios_calle_altura
@domicilio1 varchar(500),
@provincia varchar(2) = null, --
@tipo_domicilio varchar(100) = null,
@busqueda_domicilio varchar(800) = null output,
@busqueda_provincia varchar(2) = null output,
@busqueda_tipo_domicilio varchar(10) = null output
AS
BEGIN
SET NOCOUNT ON;
declare @cant1 smallint = 0
declare @palabras1 table (nro smallint, palabra varchar(100))
declare @pal varchar(100)
declare @i smallint, @j smallint
set @domicilio1 = REPLACE(@domicilio1,'¥','')
--- Paso 1: separo las palabras de los domicilios
while (@domicilio1 like '% %')
begin
set @domicilio1 = replace(@domicilio1,' ',' ')
end
set @i = len(@domicilio1)
set @j = CHARINDEX(' ', @domicilio1)
while (@j < @i and @j > 0)
begin
set @cant1 = @cant1 + 1
set @pal = (SELECT SUBSTRING(@domicilio1, 1, CHARINDEX(' ', @domicilio1) - 1))
insert into @palabras1 values (@cant1, @pal)
SET @domicilio1 = (select SUBSTRING(@domicilio1, CHARINDEX(' ', @domicilio1) +1, LEN(@domicilio1)))
set @i = len(@domicilio1)
set @j = CHARINDEX(' ', @domicilio1)
end
set @cant1 = @cant1 + 1
set @pal = @domicilio1
insert into @palabras1 values (@cant1, @pal)
-- altura del domicilio
declare @Numero_1 varchar(10) = null
set @i = 2
while (@i <= @cant1)
BEGIN
IF (@i = 2 AND (select palabra from @palabras1 where nro = 1) = 'CALLE')
BEGIN
set @i = @i + 1
CONTINUE
END
IF (@i = 3 AND (select palabra from @palabras1 where nro = 1) = 'CALLE'
AND (select palabra from @palabras1 where nro = 2) in ('N', 'NRO', 'NRO.','N*','Nº'))
BEGIN
set @i = @i + 1
CONTINUE
END
set @pal = (select palabra from @palabras1 where nro = @i)
IF ((select isnumeric(@pal)) = 1)
BEGIN
set @pal = replace(@pal,',','')
set @pal = replace(@pal,'-','')
set @pal = replace(@pal,'.','')
set @Numero_1 = convert(int,@pal)
update @palabras1 set palabra = null where nro = @i
/* Borramos todo lo que esta despues de la altura, si no se quiere borrar sacar la linea de abajo */
update @palabras1 set palabra = null where nro > @i
break
END
set @i = @i + 1
END
set @i = 1
while (@i <= @cant1)
BEGIN
set @pal = (select palabra from @palabras1 where nro = @i)
set @pal = replace(@pal,'(','')
set @pal = replace(@pal,')','')
set @pal = replace(@pal,'\*','')
set @pal = replace(@pal,'\"','')
set @pal = replace(@pal,'%','')
update @palabras1 set palabra = @pal where nro = @i
if (@pal in ('AV','AV.','AVDA','AVDA.','CALLE','NRO', 'NRO.','N*','Nº')
or
len(@pal) <= 2)
BEGIN
update @palabras1 set palabra = null where nro = @i
END
set @i = @i + 1
END
declare @buscar varchar(8000) = ''
DECLARE C_cur CURSOR FOR
select upper(palabra) from @palabras1 where palabra is not null
OPEN C_cur
FETCH NEXT FROM C_cur INTO @pal
WHILE @@fetch_status = 0
BEGIN
if @buscar = '' set @buscar = @pal
else
set @buscar = @buscar + ' near ' + @pal
FETCH NEXT FROM C_cur INTO @pal
END
CLOSE C_cur
DEALLOCATE C_cur
if @Numero_1 != '' and @buscar != ''
set @buscar = @buscar + ' near ' + @Numero_1
set @busqueda_domicilio = @buscar
set @busqueda_provincia = @provincia
set @busqueda_tipo_domicilio = @tipo_domicilio
END
GO
Depends On
No items found