2012-05-04 6 views
0

特定の指紋に一致するものをすべて検索しようとしていますが、オラクルのワイルドカードはあまり正確ではありません。Oracle SQLカスタムワイルドカード

指紋があろうと:WHEREシンボルLIKE '%_ #### @' ESCAPE '\'、(%ワイルドカード)が前に来るかは重要ではありません


次はアンダースコアです
はその後4つの数字(#)
、最後に文字AZ(@)私は翻訳機能を使用していくつかのものを見つけた

が、私はそれを動作させることができませんでした(「\」でエスケープ) 。今私は正規表現を調べていますが、私はこれまで使ったことはありません。私は彼らが何であるか、私の問題を解決するためにどのように働くのかを理解しようとしています。

答えて

2

LIKEではなく、正規表現を使用するように思えます。あなたの「指紋」は正規表現[_][[:digit:]]{4}[A-Z]によってキャプチャされているように見えますので、を使用して、指紋が存在するかどうか(そして文字列のどの位置にあるか)を判断できます。この場合には、文字列「_1234B」は、第1列に指紋であり、それはまた、WHERE句ではなく `REGEXP_INSTR`で` REGEXP_LIKE`条件を使用することも可能であろう位置7

SQL> ed 
Wrote file afiedt.buf 

    1 with x as (
    2 select 'sb1234_1234Bdelta' str from dual union all 
    3 select 'no match' from dual 
    4 ) 
    5 select str, 
    6   regexp_instr(str, '[_][[:digit:]]{4}[A-Z]') 
    7 from x 
    8* where regexp_instr(str, '[_][[:digit:]]{4}[A-Z]') > 0 
SQL>/

STR    REGEXP_INSTR(STR,'[_][[:DIGIT:]]{4}[A-Z]') 
----------------- ------------------------------------------ 
sb1234_1234Bdelta           7 
+0

で開始します関数。 –