dbo.sp_comparo_domicilios

Description

Properties

Name Value
ANSI Nulls ON

True

Quoted Identifier ON

True

Encrypted

False

Execute As
Assembly

Parameters

2
Name Data Type Length Description
@domicilio1 varchar 500
@domicilio2 varchar 500

SQL Script

Copy
SET QUOTED_IDENTIFIER, ANSI_NULLS ON
GO
/*
declare @resp int 
exec @resp = [sp_comparo_domicilios] 'DERMIDIO NARVAEZ 01¥0','DERMIDIO NARVAEZ 100'
select @resp

--select distinct domicilio from domicilios_todos where cuit = '27208925658'
--[sp_comparo_domicilios] 'cabildo 3280 3 a','av cordoba 3280 3 a'
Conversion failed when converting the varchar value '¥' to data type int.
*/

CREATE OR ALTER PROCEDURE dbo.sp_comparo_domicilios 
@domicilio1 varchar(500) = null,
@domicilio2 varchar(500) = null

AS
BEGIN
    SET NOCOUNT ON;

 declare @cant1 smallint = 0
 declare @cant2 smallint = 0

 declare @palabras1 table (nro smallint, palabra varchar(100))
 declare @palabras2 table (nro smallint, palabra varchar(100))
 declare @pal varchar(100)
 declare @i smallint, @j smallint
 
 set @domicilio1 = REPLACE(@domicilio1,'¥','')
 set @domicilio2 = REPLACE(@domicilio2,'¥','')


 IF (@domicilio1 = @domicilio2)

 begin 
    -- select '1' as respuesta 
 return '1'
 end 

--- Paso 1: separo las palabras de los domicilios
 while (@domicilio1 like '%  %')
 begin
  set @domicilio1 = replace(@domicilio1,'  ',' ')
 end 

 while (@domicilio2 like '%  %')
 begin
  set @domicilio2 = replace(@domicilio2,'  ',' ')
 end 

 set @i = len(@domicilio1)
 set @j = len(@domicilio2)

 if (@i = 0 or @i is null or @j = 0 or @j is null) -- una de los domicilios es nulo
 begin 
 --select '0' as respuesta
 return '0'
 end 

 -- domicilio 1
 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)

 -- domicilio 2
 set @i = len(@domicilio2)
 set @j = CHARINDEX(' ', @domicilio2)
 while (@j < @i and @j > 0)
 begin
  set @cant2 = @cant2 + 1
  set @pal = (SELECT SUBSTRING(@domicilio2, 1, CHARINDEX(' ', @domicilio2) - 1))
  insert into @palabras2 values (@cant2, @pal)
  SET @domicilio2 = (select SUBSTRING(@domicilio2, CHARINDEX(' ', @domicilio2) +1, LEN(@domicilio2)))
  set @i = len(@domicilio2)
  set @j = CHARINDEX(' ', @domicilio2)
 end 

 set @cant2 = @cant2 + 1
 set @pal = @domicilio2
 insert into @palabras2 values (@cant2, @pal)
 /*
  select * from @palabras1
  select * from @palabras2
  */


 -- Comparo las alturas de los domicilios

 declare @Numero_1 varchar(10) = null, 
         @Numero_2 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 
       break
      END
   set @i = @i + 1
    END 
 set @i = 2
 while (@i <= @cant2) 
 BEGIN
            IF (@i = 2 AND (select palabra from @palabras2 where nro = 1) =  'CALLE')
               BEGIN
    set @i = @i + 1
    CONTINUE
      END
            IF (@i = 3 AND (select palabra from @palabras2 where nro = 1) =  'CALLE' 
                       AND (select palabra from @palabras2 where nro = 2) in ('N', 'NRO', 'NRO.','N*','Nº'))
               BEGIN
    set @i = @i + 1
    CONTINUE
      END
   set @pal = (select palabra from @palabras2 where nro = @i)
            IF ((select isnumeric(@pal)) = 1)
      BEGIN
        set @pal = replace(@pal,',','')
          set @pal = replace(@pal,'-','')
       set @pal = replace(@pal,'.','')
       set @Numero_2 = convert(int,@pal)
       update @palabras2 set palabra = null where nro = @i 
       break
      END
   set @i = @i + 1
    END 
    IF ((@Numero_1 IS NULL AND @Numero_2 IS NOT NULL) OR
        (@Numero_2 IS NULL AND @Numero_1 IS NOT NULL) OR
        (@Numero_1 != @Numero_2)) 
 BEGIN 
        --select '0' as respuesta
  return '0'
    END 
 
 --select  @Numero_1, @Numero_2
 
/*  
PARA LOS CASOS DE CALLES QUE EL NOMBRE ES UN NRO.
*/

    declare @Calle varchar(100) = null, 
      @Calle2 varchar(100) = NULL

 IF ((select palabra from @palabras1 where nro = 1) =  'CALLE')
        BEGIN
   set @pal = (select palabra from @palabras1 where nro = 2)
   IF ((select isnumeric(@pal)) = 1)
    BEGIN
     set @calle = @pal
    END
    else 
    BEGIN
     if ((select palabra from @palabras1 where nro = 2) in ('N','NRO','NRO.','N*','Nº'))
     begin 
      set @pal = (select palabra from @palabras1 where nro = 3)
      IF ((select isnumeric(@pal)) = 1)
      BEGIN
       set @calle = @pal
      END
     end 
    END 
        END 
 set @pal = (select palabra from @palabras1 where nro = 1)
 IF ((select isnumeric(@pal)) = 1)
  BEGIN
   set @calle = @pal
  END
 ---
 IF ((select palabra from @palabras2 where nro = 1) =  'CALLE')
        BEGIN
   set @pal = (select palabra from @palabras2 where nro = 2)
   IF ((select isnumeric(@pal)) = 1)
    BEGIN
     set @calle2 = @pal
    END
    else 
    BEGIN
     if ((select palabra from @palabras2 where nro = 2) in ('N','NRO','NRO.','N*','Nº'))
     begin 
      set @pal = (select palabra from @palabras2 where nro = 3)
      IF ((select isnumeric(@pal)) = 1)
      BEGIN
       set @calle2 = @pal
      END
     end 
    END 
        END 
 set @pal = (select palabra from @palabras2 where nro = 1)
 IF ((select isnumeric(@pal)) = 1)
  BEGIN
   set @calle2 = @pal
  END

    IF (@Calle = @Calle2 AND @Numero_1 = @Numero_2)
 BEGIN
        --select '1' as respuesta 
  return '1'
    END 
----

 declare @largas smallint = 0,
            @Cortas smallint = 0
 declare @pal1 varchar(100) = null,
   @pal2 varchar(100) = null
 set @i = 1
 set @j = 1
 
 while (@i <= @cant1)
 begin
  set @j = 1
  while (@j <= @cant2)
  begin
   set @pal1 = (select palabra from @palabras1 where nro = @i) 
   set @pal2 = (select palabra from @palabras2 where nro = @j)
  
   if (@pal1 = @pal2 and @pal1 != 'PISO' and @pal1 not like 'PISO:%' and @pal1 not like 'DPTO:%' and @pal1 not like 'DTO:%' ) 
   begin
    if (LEN(@pal1) >  3) begin set @Largas = @Largas + 1 end 
    else begin set @Cortas = @Cortas + 1 end 
   end 
            set @j = @j + 1    
        end 
 set @i = @i + 1
    end 

 if (@Numero_1 is not null) set @cant1 = @cant1 - 1
 if (@Numero_2 is not null) set @cant2 = @cant2 - 1
    IF (@largas >= 1 OR @Cortas >= 3 OR (@largas + @Cortas) = @cant2 OR
                                        (@largas + @Cortas) = @cant1)
 begin 
    -- select '1' as respuesta 
 return '1'
 end 
 
 --select '0' as respuesta      
 return '0'

END 

GO

Depends On

No items found