dbo.sp_domicilios_calle_altura

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

Depends On

No items found