2017-01-16 27 views
0

我有兩個具有類似數據的表:辦公室名稱,街道地址,城市,州,郵編和電話號碼。如何創建一個查詢來加入不完全匹配的兩個表中的地址字段

我需要編寫一個查詢,查找存在於Table1但不在Table2中的辦事處和地址。查詢標準是辦公室名稱和街道地址,但街道地址並不完全匹配,因爲縮寫(Road vs RD,Street vs ST),空格,句點等。

有沒有辦法加入使用like聲明的街道地址字段?例如,Table1可能會將我的醫療中心列爲辦公室名稱,街道地址爲123 Main ST,Table2的My Medical Center爲辦公室名稱,街道地址爲123 Main Street。

我可以只加入街道地址的辦公室名稱和數字部分(123)嗎?

+0

你能加樣的數據? – DVT

+0

有沒有簡單的方法來做到這一點。您可以使用一系列已知縮寫的替換來嘗試清理數據,並使用子字符串和強制轉換來比較numeric和varchar,但只是想到它會受到傷害。 –

+0

就我的情況而言,我會討論地址的主要特性,以便根據自己的算法生成一個字符串 –

回答

0

以下是我在我的項目

CREATE FUNCTION [dbo].[fn_GetAddrMatchedKey] 
(
@ZipCode VARCHAR(15)='', 
@FirstName NVARCHAR(50)='', 
@LastName NVARCHAR(50)='', 
@BusiName NVARCHAR(300)='', 
@Address1 NVARCHAR(100)='', 
@Address2 NVARCHAR(100)='', 
@CountryCode VARCHAR(100)='' 
) 
RETURNS VARCHAR(100) 
AS 
BEGIN 

DECLARE @Key VARCHAR(50)='',@Name VARCHAR(200),@s VARCHAR(100) 




-- 1--6 
-- Collection zipcoode 
DECLARE @Zip VARCHAR(15) 
SET @Zip=replace(replace(@ZipCode,' ',''),'-','') +'  '  
SET @Zip=LEFT(CASE WHEN @CountryCode='US' THEN LEFT(@Zip,5) ELSE @Zip END,6) 
SET @[email protected][email protected] 


---7--10 
--collect name 
DECLARE @Vowel VARCHAR(300),@Consonant VARCHAR(300) 

SET @Name= UPPER(COALESCE(NULLIF(@LastName,''),NULLIF(@BusiName,''),'')) 
SET @Name=isnull(dbo.fn_RegExReplace(@Name, '%[^a-Z0-9]%', '',NULL),'') 
SET @[email protected]+LEFT(@Name+' ',1) 
IF LEN(@Name)<2 
BEGIN 
    SET @[email protected]+' ' 
END 
ELSE 
BEGIN 

    SET @Name=SUBSTRING(@Name,2,LEN(@Name)-1) 
    SET @Vowel=dbo.fn_RegExReplace(@Name, '%[^AEIOU]%', '',NULL) 
    SET @Consonant=dbo.fn_RegExReplace(@Name, '%[AEIOU]%', '',NULL) 

    IF LEN(@Consonant)>=3 
    BEGIN 
     SET @[email protected]+LEFT(@Consonant,3) 
    END 
    ELSE 
    BEGIN 
     IF len(@Vowel)<3 SET @[email protected]+' ' 
     ELSE 

     SET @[email protected]+left(dbo.fn_RegExReplace(@Name, '%[AEIOU]%', '',len(@Vowel)-(3-LEN(@Consonant))),3) 
    END 
END 
--- 11--13 
-- Get three digits number from address 
--RETURN @Key 
DECLARE @p INT 
SET @s=ISNULL(nullif(ltrim(@Address1),''),@Address2)+' ' 

SET @s= '000'+SUBSTRING(@s, PATINDEX('%[0-9]%',@s),PATINDEX('%[0-9][^0-9]%',@s)-PATINDEX('%[0-9]%',@s)+1) 
SET @[email protected]+RIGHT(@s,3) 


---- 14--14 
SET @[email protected]+left(ISNULL(upper(@FirstName),'')+' ',1) 

-- 15--15 
SET @[email protected]+'1' 


RETURN @Key 

使用 - 用正則表達式替換功能 使用此功能來獲得或刪除字符調校妥當

CREATE FUNCTION [dbo].[fn_RegExReplace] 
    (
     @string VARCHAR(MAX), 
     @substring VARCHAR(MAX), 
     @replacement VARCHAR(MAX), 
     @ReplaceCount INT 
    ) 
    RETURNS VARCHAR(max) 
    AS 
    BEGIN 
     DECLARE @sRet VARCHAR(MAX) 
     DECLARE @iPos INT=1,@Count INT=0 
     IF isnull(@ReplaceCount,0)<1 SET @ReplaceCount=len(@string) 

     WHILE @iPos>0 AND @Count<@ReplaceCount 
     BEGIN 
      SET @iPos=PATINDEX(@substring,@string) 
      IF @iPos>0 
      BEGIN 
       SET @[email protected]+1 
       SET @sRet=isnull(@sRet,'')+left(@string,@iPos-1)[email protected] 
       SET @string=substring(@string,@iPos+1,CASE WHEN len(@string)<[email protected] THEN LEN(@string) ELSE len(@string)[email protected] END) 
      END 
      ELSE 
      BEGIN 
       SET @iPos=0 
       SET @sRet=isnull(@sRet,'')[email protected] 
      END 
      IF @[email protected] 
      BEGIN 
       SET @sRet=isnull(@sRet,'')[email protected] 
      END 

     END 
     RETURN @sRet 

    END 


END 
相關問題