0

こんにちは、データベース内に 2 つのテーブルがあります。「登録者名」フィールドとその他の情報を含む登録者テーブルと、「Business_Identifier」という列を含む参照/ルックアップ テーブルです。

「登録者名」フィールドのデータと「Business_Identifier」列に含まれるデータを比較して、「登録者名」フィールドに含まれるデータが企業のものか個人のものかを識別するという考え方です。

例は次のとおりです。

Registrant Table:
ID: 1234
Registrant NAme: ABC Ltd


Lookup Table:
ID:1,2,3                      
Business_Identifier: ltd,PLC,LLC

ルックアップ テーブルのデータを取得し、それが [登録者名] フィールドに表示されるかどうかを確認して、レコードをビジネスとして識別する何らかの形式のパターン マッチングを実行するストアド プロシージャを作成しようとしています。

静的リストでパターン マッチングを実行するスクリプトを作成しました。以下の例を参照してください。ただし、更新できるように静的リストをテーブルに変換する必要があります。

現在のスクリプト:

With Test as (
SELECT *    
  FROM [Registrant_Table]
  where (patindex('%[0-9]%',UPPER([Registrant name])) > 0
     or patindex('%null%',UPPER([Registrant name])) > 0
     or patindex('%n/a%',UPPER([Registrant name])) > 0     
     or patindex('na',UPPER([Registrant name])) > 0
     or patindex('%LTD%',UPPER([Registrant name])) > 0
     or patindex('%None%',[Registrant name]) > 0
     or patindex('%unknown%',[Registrant name]) > 0
     or patindex('%Ltd%',[Registrant name]) > 0
     or patindex('%ltd%',[Registrant name]) > 0
     or patindex('%LLC%',[Registrant name]) > 0
     or patindex('%LLc%',[Registrant name]) > 0     
     or patindex('%LLP%',[Registrant name]) > 0
     or patindex('%LLp%',[Registrant name]) > 0       
     or patindex('%llp%',[Registrant name]) > 0
     or patindex('%Limited%',[Registrant name]) > 0          
     or patindex('%LIMITED%',[Registrant name]) > 0
     or patindex('%Limi%',[Registrant name]) > 0 
     or patindex('%Company%',[Registrant name]) > 0
     or patindex('%Tele%',[Registrant name]COLLATE Latin1_General_CS_AI) > 0  
     or patindex('%Trade%',[Registrant name]) > 0
     or patindex('%Host%',[Registrant name]) > 0
     or patindex('%Domain%',[Registrant name]) > 0
     )

select * 
Into [Registrant_Table_Business]
from Test

どんな助けでも大歓迎です

ありがとう

4

1 に答える 1

0

ルックアップテーブルがとのビット列を定義している場合はuppercollation次を使用できます。

SELECT *    
  FROM [Registrant_Table] r
 CROSS JOIN [PatternLookup] l
 WHERE patindex('%' + l.Pattern + '%', 
        case when l.IsUpper = 1
             then case when l.IsLatin1_General_CS_AI = 1 
                  then upper (r.[Registrant name]) COLLATE Latin1_General_CS_AI
                  else upper (r.[Registrant name]) 
                  end
             else case when l.IsLatin1_General_CS_AI = 1 
                       then r.[Registrant name]  COLLATE Latin1_General_CS_AI
                       else r.[Registrant name]
                  end
        end) > 0

更新:パターンのテーブルを作成します:

create table PatternLookup
(
  PatternLookupID int identity primary key,
  Pattern nvarchar(100) not null,
  IsUpper bit default 0 not null,
  IsLatin1_General_CS_AI bit default 0 not null
)

そして、いくつかの挿入物:

   insert into PatternLookup (Pattern, isUpper, IsLatin1_General_CS_AI) values
          ('LTD', 1, 0),   -- This pattern asks for uppercased [Registrant name]
          ('Tele', 0, 1),  -- This one needs registrant in different collation
          ('Company', 0, 0)-- And this one is as-is
于 2012-07-20T10:16:26.620 に答える