パフォーマンスを点検したいと思うかもしれない
は、文字列があなたのid文字列内で使用可能であるかどうかを確認するINSTRを使用して、このクエリを考えてみましょう。私は部分を抽出するためにsubstring_indexを使用しました。 id文字列の一部を分割または抽出して一時テーブルを作成することに興味があっても、この回答のために無視することができます。
理想的には、keyword1、keyword2 & keyword3をパラメータとして使用して独自のストアドプロシージャを作成し、検索を実行して結果を返すことができます。
ここで、キーワード1、2 & 3がID文字列に含まれているかどうかを調べます。
select
'ZZZZZZ-BBBBBB-CCCCCC-DDDDDD-EEEEEE-XXXXXXX' as Id,
substring_index('ZZZZZZ-BBBBBB-CCCCCC-DDDDDD-EEEEEE-XXXXXXX','-', 1) as part1,
substring_index(substring_index('ZZZZZZ-BBBBBB-CCCCCC-DDDDDD-EEEEEE-XXXXXXX','-', 2),'-', -1) as part2,
substring_index(substring_index('ZZZZZZ-BBBBBB-CCCCCC-DDDDDD-EEEEEE-XXXXXXX','-', 3),'-', -1) as part3,
substring_index(substring_index('ZZZZZZ-BBBBBB-CCCCCC-DDDDDD-EEEEEE-XXXXXXX','-', 4),'-', -1) as part4,
substring_index(substring_index('ZZZZZZ-BBBBBB-CCCCCC-DDDDDD-EEEEEE-XXXXXXX','-', 5),'-', -1) as part5,
substring_index(substring_index('ZZZZZZ-BBBBBB-CCCCCC-DDDDDD-EEEEEE-XXXXXXX','-', 6),'-', -1) as part6
from dual
WHERE
instr('ZZZZZZ-BBBBBB-CCCCCC-DDDDDD-EEEEEE-XXXXXXX','BBBBBB') >= 1 -- keyword1
and instr('ZZZZZZ-BBBBBB-CCCCCC-DDDDDD-EEEEEE-XXXXXXX','CCCCCC') >= 1 -- keyword2
and instr('ZZZZZZ-BBBBBB-CCCCCC-DDDDDD-EEEEEE-XXXXXXX','DDDDDD') >= 1 -- keyword3
;
EDIT 上記のクエリでは、あなたのロジックを追加することができます動作していますか。
select
'ZZZZZZ-BBBBBB-CCCCCC-DDDDDD-EEEEEE-XXXXXXX' as Id
from dual
WHERE
(
-- below logic gives true when 3 or more keywords are found. change this accordingly
(instr('ZZZZZZ-BBBBBB-CCCCCC-DDDDDD-EEEEEE-XXXXXXX',ik1) >0)+
(instr('ZZZZZZ-BBBBBB-CCCCCC-DDDDDD-EEEEEE-XXXXXXX',ik2) >0)+
(instr('ZZZZZZ-BBBBBB-CCCCCC-DDDDDD-EEEEEE-XXXXXXX',ik3) >0)+
(instr('ZZZZZZ-BBBBBB-CCCCCC-DDDDDD-EEEEEE-XXXXXXX',ik4) >0)+
(instr('ZZZZZZ-BBBBBB-CCCCCC-DDDDDD-EEEEEE-XXXXXXX',ik5) >0)+
(instr('ZZZZZZ-BBBBBB-CCCCCC-DDDDDD-EEEEEE-XXXXXXX',ik6) >0)
) >=3
;
あなたの一意のIDをに分割する必要がある
はその後@ krishKMの回答に基づいて、私は選択構文を作成しましたこれははるかに簡単です。また、マッチのポジションは一致する必要がありますか? –
あなたは[同じような種類のデータを常に類似した文字で書かれたクレジットカードのスタイルがあれば[これは](http://stackoverflow.com/questions/17392197/selecting-part-of-a-field -with-a-regex)または[これは](http://stackoverflow.com/questions/1326063/using-columns-in-a-regexp-in-mysql)と[これは](http://stackoverflow.com/questions/9315647/regex-credit-card-number-tests) – OldPadawan
ありがとうございます!残念ながら、列には、同じ順序ではなく、「一意のID部分」を含めることができます。一意のIDは、短くすることができます(たとえば、6個の代わりに4個など)。これらの部分は通常、ハッシュされたハードウェア情報です(ランダムな長さの数字、最大12文字の長さです)。 – Mona